4

「エントリ」オブジェクト (それぞれに ID がある) のリストがあり、それらを ID で分割して 2D 配列を作成したいと考えています。

class Entry
{
    public int ID { get; set; }
    public int value { get; set; }

    public Entry(int id, int value)
    {
        this.ID = id;
        this.value = value;
    }
}

人口:

        List<Entry> entries = new List<Entry>();
        entries.Add(new Entry(0, 20));
        entries.Add(new Entry(1, 20));
        entries.Add(new Entry(1, 25));
        entries.Add(new Entry(2, 21));
        entries.Add(new Entry(2, 23));

ID で分割されたエントリの多次元リストを作成する必要があります。次のコードは、配列を構築します。

        List<Entry> entriesZero = new List<Entry>();
        entriesZero.Add(new Entry(0, 20));

        List<Entry> entriesOne = new List<Entry>();
        entriesOne.Add(new Entry(1, 20));
        entriesOne.Add(new Entry(1, 25));

        List<Entry> entriesTwo = new List<Entry>();
        entriesTwo.Add(new Entry(2, 21));
        entriesTwo.Add(new Entry(2, 23));

        List<List<Entry>> entriesByID = new List<List<Entry>>();
        entriesByID.Add(entriesZero);
        entriesByID.Add(entriesOne);
        entriesByID.Add(entriesTwo);

このようなことを達成するための最良の方法は何でしょうか? 複数の foreach ループでそれを行うこともできますが、LINQ でより良い方法があるかどうか疑問に思っています。

4

3 に答える 3

8

IDでグループ化されたリストにする必要がありますか? Lookupはこれを非常に簡単に行います。

ILookup<int, Entry> entriesById = entries.ToLookup(e => e.Id);

それを繰り返すことはできますが、任意の ID のすべてのエントリを検索することもできます。

本当に、本当に必要なList<List<Entry>>場合は、これを行うことができます:

var listOfLists = entriesById.GroupBy(e => e.Id)
                             .Select(g => g.ToList())
                             .ToList();

...しかし、私はルックアップに行きます。

于 2013-03-21T22:39:09.053 に答える
1

GroupBy+ ToList(グループ自体に 1 つ、全体に 1 つ)だけが必要です。

List<List<Entry>> entriesByID = entries.GroupBy(entry => entry.ID)
            .Select(g => g.ToList())
            .ToList();
于 2013-03-21T22:43:13.390 に答える
0

これを行うこともできます:(非LINQ)

Dictionary<int , List<Entry>> dictionary = new ...

foreach (var v in entries)
    dictionary[v.ID].Add(v);
于 2013-03-21T22:41:43.633 に答える