使用C#lambdas组合列表<;int>;和int
我有以下成对对象列表:使用C#lambdas组合列表<;int>;和int,c#,lambda,C#,Lambda,我有以下成对对象列表: 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}) }; 我试过很多
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})
};
我试过很多像这样的摆弄,但都没有用:
var flattenedListOfPairs = listOfPairs.Select(pair => new List<int>(pair.First).AddRange(pair.Second));
var flattedListofPairs=listOfPairs.Select(pair=>newlist(pair.First).AddRange(pair.Second));
我假设我正在尝试做的事情是可能的,我只是错过了一些东西。听起来你可能想要这样的东西:
var flattened = listOfPairs.Select(pair => new[] { pair.First }.Concat(pair.Second)
.ToList())
.ToList();
或:
或使用
听起来你可能想要这样的东西:
var flattened = listOfPairs.Select(pair => new[] { pair.First }.Concat(pair.Second)
.ToList())
.ToList();
或:
或使用
这将以您指定的形式提供列表列表:
listOfPairs.Select(p => new []{ p.First }.Concat(p.Second).ToList()).ToList()
这将以您指定的形式提供列表列表:
listOfPairs.Select(p => new []{ p.First }.Concat(p.Second).ToList()).ToList()
其他答案已经包括了如何做到这一点,所以我在这里不再重复。这个答案是为了解释为什么您现有的代码不起作用。您希望向列表构造函数传递一个int,并让它用该int初始化列表。构造函数不是这样工作的。列表构造函数使用int参数来设置列表的初始大小,而不是设置任何项的值。其他答案已经介绍了如何实现这一点,因此在此不再重复。这个答案是为了解释为什么您现有的代码不起作用。您希望向列表构造函数传递一个int,并让它用该int初始化列表。构造函数不是这样工作的。列表构造函数使用int参数设置列表的初始大小,而不是设置任何项的值。尝试以下操作:
var flattenedListOfPairs = listOfPairs.Select(pair =>
{
var list = new List<int>(pair.First);
list.AddRange(pair.Second));
return list;
}.ToList();
var flattedListofPairs=listOfPairs.Select(对=>
{
var列表=新列表(第一对);
list.AddRange(pair.Second));
退货清单;
}.ToList();
试试这个:
var flattenedListOfPairs = listOfPairs.Select(pair =>
{
var list = new List<int>(pair.First);
list.AddRange(pair.Second));
return list;
}.ToList();
var flattedListofPairs=listOfPairs.Select(对=>
{
var列表=新列表(第一对);
list.AddRange(pair.Second));
退货清单;
}.ToList();
听起来像是SelectMany()
的工作?听起来像是SelectMany()
的工作?Jon,我爱你的MoreLINQ库,这是你所不知道的。我很惊讶这些方法中有很多没有被添加到框架中,尽管我知道有一些没有被添加的机会。在我看来,Concat是最好的选择,因为如果“first”这个数字已经存在于收藏中的话,Union会删除它。waldrumpus首先得到了他发布的答案b/c,但我投票支持你的评论,因为你详细阐述了解决我问题的多种方法,并向我介绍了MoreLINQ。太好了!乔恩,我比你所知道的更爱你的莫林克图书馆。我很惊讶这些方法中有很多没有被添加到框架中,尽管我知道有一些没有被添加的机会。在我看来,Concat是最好的选择,因为如果“first”这个数字已经存在于收藏中的话,Union会删除它。waldrumpus首先得到了他发布的答案b/c,但我投票支持你的评论,因为你详细阐述了解决我问题的多种方法,并向我介绍了MoreLINQ。太好了@AspNyc请注意,如果您放弃第一次调用ToList
,结果列表的元素将是IEnumerable
,而不是列表。是的,我也意识到了这一点=P谢谢@AspNyc请注意,如果您放弃第一次调用ToList
,结果列表的元素将是IEnumerable
,而不是列表。是的,我也意识到了这一点=P谢谢!是的,我对C#还是个新手,当我真正打算使用对象初始化语法(例如{..})时,我会尝试将数据传递给构造函数。谢谢你指出这一点!是的,我对C#还是个新手,当我真正打算使用对象初始化语法(例如{..})时,我会尝试将数据传递给构造函数。谢谢你指出这一点!