17

たとえば、 ofのそれぞれTupleの最初の項目のリストを作成する正しい方法は何ですか?ListTuples

がある場合、それぞれの最初の文字列List<Tuple<string,string>>を取得するにはどうすればよいですか?List<string>Tuple

4

4 に答える 4

24

小さな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は必要以上のメモリをリストに割り当てます。

于 2013-01-15T20:15:57.197 に答える
6
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.Addinのダブリングアルゴリズムを回避するためToListです。

于 2013-01-15T20:15:43.673 に答える
0

がある場合はList<Tuple<string, string>> listoftuples、List の Select メソッドの実装を使用して、各タプルから最初の文字列を取得できます。

次のようになります。

List<string> firstelements = listoftuples.Select(t => t.Item1).ToList();
于 2013-01-15T20:17:41.880 に答える