使用C#lambdas组合List <int>和int </int>

时间:2012-08-01 13:33:22

标签: c# lambda

我有以下Pair对象列表:

var listOfPairs = new List<Pair<int, List<int>>>() {
    new Pair<int, List<int>>(30, new List<int>() {3, 6, 9}),
    new Pair<int, List<int>>(40, new List<int>() {4, 8, 12})
};

我想得到以下整数列表列表:

listOfPairs[0] = {30, 3, 6, 9};
listOfPairs[1] = {40, 4, 8, 12};

我尝试了很多看似这样的小摆设,但无济于事:

var flattenedListOfPairs = listOfPairs.Select(pair => new List<int>(pair.First).AddRange(pair.Second));

我认为我正在尝试做的事情是可能的,而我只是错过了一些东西。

4 个答案:

答案 0 :(得分:5)

听起来你可能想要这样的东西:

var flattened = listOfPairs.Select(pair => new[] { pair.First }.Concat(pair.Second)
                                                               .ToList())
                           .ToList();

或者:

var flattened = listOfPairs.Select(pair => Enumerable.Repeat(pair.First, 1)
                                                     .Concat(pair.Second)
                                                     .ToList())
                           .ToList();

或使用MoreLINQ

var flattened = listOfPairs.Select(pair => pair.Second.Prepend(pair.First)
                                                      .ToList())
                           .ToList();

答案 1 :(得分:2)

这会以您指定的格式为您提供列表清单:

listOfPairs.Select(p => new []{ p.First }.Concat(p.Second).ToList()).ToList()

答案 2 :(得分:1)

其他答案已经涵盖了如何做到这一点,所以我在此不再重复。这个答案是为了解释为什么你现有的代码不起作用。您希望将一个int传递给List构造函数,并使用该int初始化List。这不是构造函数的工作方式。 List构造函数使用int参数来设置列表的初始大小,而不是设置任何项的值。

答案 3 :(得分:0)

试试这个:

var flattenedListOfPairs = listOfPairs.Select(pair => 
                                                  {
                                                      var list = new List<int>(pair.First);
                                                      list.AddRange(pair.Second));
                                                      return list;
                                                  }.ToList();