11

我有一个List<Tuple<A,B>>并且想知道 LINQ 是否有办法返回Tuple<List<A>,List<B>>

这类似于以下 Python 问题:Unpacking a list / tuple of pairs into two lists / tuples

4

4 回答 4

12

使用单个 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);
}
于 2012-07-27T13:59:23.510 回答
6

您可以使用聚合

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;
                          });
}
于 2012-07-27T18:46:48.890 回答
3
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());
}
于 2012-07-27T14:38:43.163 回答
-2
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());
}

我认为它是一个整数列表

于 2012-07-27T14:06:30.607 回答