C#将两个列表组合在一起创建一个新列表

时间:2013-12-06 02:22:35

标签: c#

所以我试图找到如何最好地创建一个列表,将两个相同大小的两个不同类型的列表组合在一起,以便索引将是相同的。我怎么能这样做?

var list = new List<KeyValuePair<List<Card>, List<Card>>>();
list.AddRange(new List<KeyValuePair<List<Card>,List<Card>>>(_listCards,cloneOf_listCards));

上面的代码一直是我尝试让它工作的方式,其中Card是一个同时包含Suit和Cardnumber的类。虽然我的代码没有这样做,但我希望将它作为一个列表,使用Images而不是Card列表。我已经看过这些和许多其他线程:join of two lists in c# https://stackoverflow.com/questions/16465804/return-two-combined-listt

1 个答案:

答案 0 :(得分:3)

您可以使用Enumerable.Zip扩展方法。

例如:

_listCards.Zip(cloneOf_listCards, (cardA, cardB) => new KeyValuePair<Card, Card>(cardA, cardB));

当然,这会给你一个List<KeyValuePair<Card,Card>>而不是KeyValuePair<List<Card>, List<Card>>,但我认为这是一个更好的设计。

此时(如果你愿意),你可以把它变成Dictionary<Card,Card>

var joined = _listCards.Zip(cloneOf_listCards, (cardA, cardB) => new KeyValuePair<Card, Card>(cardA, cardB));
var dictionary = joined.ToDictionary(kv => kv.Key, kv => kv.Value);

请注意,如果您的列表大小不同,Enumerable.Zip只会将元素加入到较短列表的末尾,然后停止。