1

我有以下 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

4 回答 4

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();
于 2012-08-01T13:39:19.250 回答
2

这会以您指定的形式为您提供列表列表:

listOfPairs.Select(p => new []{ p.First }.Concat(p.Second).ToList()).ToList()
于 2012-08-01T13:40:58.147 回答
1

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

于 2012-08-01T13:47:21.127 回答
0

试试这个:

var flattenedListOfPairs = listOfPairs.Select(pair => 
                                                  {
                                                      var list = new List<int>(pair.First);
                                                      list.AddRange(pair.Second));
                                                      return list;
                                                  }.ToList();
于 2012-08-01T13:48:21.483 回答