11

私は持っていますがList<Tuple<A,B>>、LINQに戻る方法があるかどうか知りたいですTuple<List<A>,List<B>>

これは、次のPythonの質問に似ています。リスト/ペアのタプルを2つのリスト/タプルに解凍します。

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

Aggregateを使用できます:

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 に答える