佐々木屋

技術的なことから趣味まで色々書きます

取得メソッド②(Skip、Take、SkipWhile、TakeWhile)

コレクションの特定要素を取得する際に利用します。Selectメソッドの場合だとコレクションを上から順番に評価していきますが、予め取得したい要素の場所が決まっているような場合は走査が無駄になる場合があります。その場合はこれらのメソッドを活用します。

なお、コレクションは以下を共通で利用します。

int[] values = { 1, 9, 5, 6, 8, 6, 2, 5, 3 };
Dim values As Integer() = {1, 9, 5, 6, 8, 6, 2, 5, 3}


Skipメソッド

コレクションの先頭から指定された要素数を除外して、以降をコレクションとして返します。
例えば、3番目までスキップして4番目以降をコレクションとして返す場合は以下の通りです。

Console.WriteLine(string.Join(",",values.Skip(3)));
Console.WriteLine(String.Join(",", values.Skip(3)))
6,8,6,2,5,3


Takeメソッド

Skipメソッドと逆で、コレクションの先頭から指定された要素数を返します。
例えば、3番目までのコレクションを取得する場合は以下の通りです。

Console.WriteLine(string.Join(",", values.Take(3)));
Console.WriteLine(String.Join(",", values.Take(3)))
1,9,5


SkipWhileメソッド

Skipメソッドの条件あり版で、コレクションの先頭から走査して指定された条件が「偽」の間は除外し、「真」以降の要素をコレクションとして返します。

例えば、要素が8と一致するところまで除外する場合は以下の通りです。

Console.WriteLine(string.Join(",", values.SkipWhile(x => x != 8)));
Console.WriteLine(String.Join(",", values.SkipWhile(Function(x) x <> 8)))
8,6,2,5,3


TakeWhileメソッド

Takeメソッドの条件あり版で、コレクションの先頭から走査して指定された条件が「偽」になるまでの要素をコレクションとして返します。

例えば、要素が8と一致するまでのコレクションを取得する場合は以下の通りです。

Console.WriteLine(string.Join(",", values.TakeWhile(x => x != 8)));
Console.WriteLine(String.Join(",", values.TakeWhile(Function(x) x <> 8)))
1,9,5,6