1

次のペアオブジェクトのリストがあります。

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));

私がやろうとしていることは可能だと思いますが、何かが足りないだけです。

4

4 に答える 4

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();
于 2012-08-01T13:39:19.250 に答える
2

これにより、指定した形式でリストのリストが得られます。

listOfPairs.Select(p => new []{ p.First }.Concat(p.Second).ToList()).ToList()
于 2012-08-01T13:40:58.147 に答える
1

他の回答でこれを行う方法が既に説明されているため、ここでは繰り返しません。この回答は、既存のコードが機能しなかった理由を説明するためのものです。int を List コンストラクターに渡して、その int で List を初期化することを期待していました。それはコンストラクタがどのように機能するかではありません。List コンストラクターは、項目の値を設定するのではなく、int 引数を使用してリストの初期サイズを設定します。

于 2012-08-01T13:47:21.127 に答える
0

これを試して:

var flattenedListOfPairs = listOfPairs.Select(pair => 
                                                  {
                                                      var list = new List<int>(pair.First);
                                                      list.AddRange(pair.Second));
                                                      return list;
                                                  }.ToList();
于 2012-08-01T13:48:21.483 に答える