我有一个List<Tuple<A,B>>
,想知道在LINQ中是否有一种方法可以返回Tuple<List<A>,List<B>>
这类似于以下Python问题:将列表/元组的成对解包为两个列表/元组
我有一个List<Tuple<A,B>>
,想知道在LINQ中是否有一种方法可以返回Tuple<List<A>,List<B>>
这类似于以下Python问题:将列表/元组的成对解包为两个列表/元组
使用单个LINQ调用不可能实现,但是您可以轻松地使用代码完成:
Tuple<List<A>, List<B>> Unpack<A, B>(List<Tuple<A, B>> list)
{
var listA = new List<A>(list.Count);
var listB = new List<B>(list.Count);
foreach (var t in list)
{
listA.Add(t.Item1);
listB.Add(t.Item2);
}
return Tuple.Create(listA, listB);
}
Tuple<List<A>, List<B>> Unpack<A, B>(List<Tuple<A, B>> list)
{
return list.Aggregate(Tuple.Create(new List<A>(list.Count), new List<B>(list.Count)),
(unpacked, tuple) =>
{
unpacked.Item1.Add(tuple.Item1);
unpacked.Item2.Add(tuple.Item2);
return unpacked;
});
}
Tuple<List<A>, List<B>> Unpack<A, B>(List<Tuple<A, B>> list) {
return Tuple.Create(list.Select(e => e.Item1).ToList(),list.Select(e => e.Item2).ToList());
}
public Tuple<List<int>,List<int>> Convert(List<Tuple<int, int>> BaseList)
{
return new Tuple<List<int>,List<int>>((from tuple in BaseList
select tuple.Item1).ToList(),
(from tuple in BaseList
select tuple.Item2).ToList());
}
我认为这是一个整数列表
pairs.ForEach(pair => { unpacked.Item1.Add(pair.Item1); unpacked.Item2.Add(pair.Item2); });`
- Adam Houldsworth