今回は、Take拡張メソッドとTakeWhile拡張メソッドについてです。
Take拡張メソッドは、指定された件数分シーケンスから要素を返します。
TakeWhile拡張メソッドは、指定された条件が満たされる間要素を返します。
Take拡張メソッドは、よくトップNを抽出する際に使われます。
シーケンスの要素数以上の数を指定しても、例外は発生しません。
空のシーケンスが返されます。
書式は以下の通り。
public static IEnumerable<TSource> Take<TSource>( this IEnumerable<TSource> source, int count ) public static IEnumerable<TSource> TakeWhile<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate ) public static IEnumerable<TSource> TakeWhile<TSource>( this IEnumerable<TSource> source, Func<TSource, int, bool> predicate )
TakeWhileの2つ目の書式は、predicateに要素のインデックスが追加されます。
インデックス値が必要な場合はこちらを使います。
以下、サンプルです。
#region LinqSamples-43 public class LinqSamples43 : IExecutable { public void Execute() { // // Take拡張メソッドは、シーケンスの先頭から指定された件数分を返すメソッド。 // // ・シーケンスの要素数より多い数を指定した場合、そのシーケンス全てが返る. // ・0以下の値を指定した場合、空のシーケンスが返る. // var names = new string[] { "gsf_zero1", "gsf_zero2", "gsf_zero3", "gsf_zero4", "gsf_zero5" }; Console.WriteLine("================ Take ======================"); var top3 = names.Take(3); foreach (var item in top3) { Console.WriteLine(item); } foreach (var item in names.Take(20)) { Console.WriteLine(item); } Console.WriteLine("0以下の数値を指定: COUNT={0}", names.Take(-1).Count()); // // TakeWhile拡張メソッドは、指定された条件が満たされる間シーケンスから要素を抽出し // 返すメソッド。 // Console.WriteLine("================ TakeWhile ======================"); var lessThan4 = names.TakeWhile(name => int.Parse(name.Last().ToString()) <= 4); foreach (var item in lessThan4) { Console.WriteLine(item); } } } #endregion
実行結果は以下の通りです。
================ Take ====================== gsf_zero1 gsf_zero2 gsf_zero3 gsf_zero1 gsf_zero2 gsf_zero3 gsf_zero4 gsf_zero5 0以下の数値を指定: COUNT=0 ================ TakeWhile ====================== gsf_zero1 gsf_zero2 gsf_zero3 gsf_zero4
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ