4

我有一个“条目”对象列表(每个对象都有一个 ID),并希望通过按 ID 拆分它们来创建一个二维数组:

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 分组的列表吗?查找将非常容易地为您做到这一点:

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(一个组本身和一个整体):

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 回答