たとえば、 ofのそれぞれTuple
の最初の項目のリストを作成する正しい方法は何ですか?List
Tuples
がある場合、それぞれの最初の文字列List<Tuple<string,string>>
を取得するにはどうすればよいですか?List<string>
Tuple
小さなLinqがそのトリックを実行します。
var myStringList = myTupleList.Select(t=>t.Item1).ToList();
説明として、Timはほぼ同じ答えを投稿したので、Select()は1:1の「射影」を作成します。Enumerableの各入力要素を受け取り、それぞれについてラムダ式を評価し、同じ数の要素を持つ新しいEnumerableの要素として結果を返します。次に、ToList()は、Select()によって生成されたEnumerableをスピンし、各要素を一度に1つずつ新しいList<T>
インスタンスに追加します。
ティムはメモリ効率について良い点を持っています。ToList()はリストを作成し、要素を1つずつ追加します。これにより、リストは基になる配列のサイズを変更し続け、適切な容量を確保するために毎回2倍になります。大きなリストの場合、OutOfMemoryExceptionsが発生する可能性があり、要素の数が2の累乗でない限り、CLRは必要以上のメモリをリストに割り当てます。
List<string> list = tuples.Select(t => t.Item1).ToList();
または、メモリのコストが低くなる可能性があります。
List<string> list = new List<String>(tuples.Count);
list.AddRange(tuples.Select(t => t.Item1));
List.Add
inのダブリングアルゴリズムを回避するためToList
です。
がある場合はList<Tuple<string, string>> listoftuples
、List の Select メソッドの実装を使用して、各タプルから最初の文字列を取得できます。
次のようになります。
List<string> firstelements = listoftuples.Select(t => t.Item1).ToList();