5

条件を指定せずに 2 つのリストの項目の順序に依存する場合に、同じ長さの 2 つのリストを結合するにはどうすればよいですか (同じ長さの 3 番目のリストを生成するため)。

たとえば、どのように参加できますか:

{1,2,3,4} with {5,6,7,8}

生産する:

{{1,5}, {2,6}, {3,7}, {4,8}}

私は次のことを試しました:

from i in new []{1,2,3,4}
from j in new []{5,6,7,8}
select new { i, j }

しかし、これは交差結合を生成します。join を使用するときは、常に「on」を指定する必要があります。

4

3 に答える 3

15

最初のリストでSelectを使用し、アイテムインデックスを使用して、2番目のリストの要素にアクセスできます。

var a = new [] {1,2,3,4};
var b = new [] {5,6,7,8};

var qry = a.Select((i, index) => new {i, j = b[index]}); 
于 2009-04-23T23:22:15.737 に答える
5

.Net 4.0 を使用している場合は、Zip 拡張メソッドと Tuples を使用できます。

var a = new [] {1,2,3,4};
var b = new [] {5,6,7,8};

var result = a.Zip(b, (an, bn) => Tuple.Create(an, bn));

または、それらを配列として保持することもできます。

var resultArr = a.Zip(b, (an, bn) => new []{an, bn});
于 2010-10-28T14:12:03.013 に答える
0

クエリ構文を使用する場合は、中途半端な解決策があります。where 句で使用するインデックスを取得するには、両方のリストで Select メソッドを使用する必要があるという意味で、半分の方法です。

int[] list1 = {1,2,3,4};
int[] list2 = {5,6,7,8};

var result = from item1 in list1.Select((value, index) => new {value, index})
             from item2 in list2.Select((value, index) => new {value, index})
             where item1.index == item2.index
             select new {Value1 = item1.value, Value2 = item2.value};

このソリューションの利点は、インデクサーを使用したソリューションのように、リストの長さが異なっていても失敗しないことです。

于 2010-10-28T13:28:32.947 に答える