我有以下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));
我认为我正在尝试做的事情是可能的,而我只是错过了一些东西。
答案 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();