情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Enumerable.Select<TSource, TResult> メソッド (IEnumerable<TSource>, Func<TSource, Int32, TResult>)

2013/12/12

要素のインデックスを組み込むことにより、シーケンスの各要素を新しいフォームに射影します。

Namespace:  System.Linq
アセンブリ:  System.Core (System.Core.dll 内)

public static IEnumerable<TResult> Select<TSource, TResult>(
	this IEnumerable<TSource> source,
	Func<TSource, int, TResult> selector
)

型パラメーター

TSource

source の要素の型。

TResult

selector によって返される値の型。

パラメーター

source
型: System.Collections.Generic.IEnumerable<TSource>
変換関数を呼び出す対象の値のシーケンスです。
selector
型: System.Func<TSource, Int32, TResult>
各ソース要素に適用する変換関数で、関数の 2 番目のパラメーターはソース要素のインデックスを表します。

戻り値

型: System.Collections.Generic.IEnumerable<TResult>
source の各要素に対して変換関数を呼び出した結果として得られる要素を含む IEnumerable<T>

使用上の注意

Visual Basic および C# では、このメソッドを、IEnumerable<TSource> 型の任意のオブジェクトのインスタンス メソッドとして呼び出すことができます。インスタンス メソッド構文を使用してこのメソッドを呼び出す場合は、最初のパラメーターを省略します。

例外条件
ArgumentNullException

source または selectornull です。

このメソッドは遅延実行を使用して実装されます。アクションの実行に必要なすべての情報を格納するオブジェクトがすぐに返されます。このメソッドで表されるクエリは、オブジェクトの GetEnumerator メソッドを直接呼び出すか、または Visual C# の foreach または Visual Basic の For Each を使用してオブジェクトが列挙されるまで、実行されません。

selector の最初の引数は、処理する要素を表します。selector の 2 つ目の引数は、ソース シーケンス内のその要素の 0 から始まるインデックスを表します。これは、要素が既知の順序である場合、特定のインデックスの要素に対して処理を行いたいときに役立ちます。また、1 つ以上の要素のインデックスを取得する場合にも役立つことがあります。

この投影メソッドには、ソース シーケンス source の各値に対して値を 1 つ生成するために、変換関数 selector が必要です。selector がそれ自体がコレクションである値を返す場合、サブシーケンスを手動で検討するかどうかはコンシューマーの判断によります。こうした状況では、クエリによって値の結合された 1 つのシーケンスを返す方が適しています。これを行うには、Select ではなく SelectMany メソッドを使用します。SelectMany は、Select と同様に機能しますが、変換関数が、事前に SelectMany によって拡張されたコレクションを返すという点が異なります。

Select<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, TResult>) を使用し、値のシーケンスに射影して、各要素のインデックスを使用する方法を次のコード例に示します。


      string[] fruits = { "apple", "banana", "mango", "orange", 
                               "passionfruit", "grape" };

      var query =
          fruits.Select((fruit, index) =>
                            new { index, str = fruit.Substring(0, index) });

      foreach (var obj in query)
      {
         outputBlock.Text += String.Format("{0}", obj) + "\n";
      }

      /*
       This code produces the following output:

       {index=0, str=}
       {index=1, str=b}
       {index=2, str=ma}
       {index=3, str=ora}
       {index=4, str=pass}
       {index=5, str=grape}
      */



Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: