从对象列表创建多维数组

时间:2013-03-21 22:37:09

标签: c# .net linq

我有一个“Entry”对象列表(每个对象都有一个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中是否有更好的方法。

3 个答案:

答案 0 :(得分: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();

...但我会继续查找。

答案 1 :(得分:1)

你只需要GroupBy + ToList(一个群体本身就是一个整体):

List<List<Entry>> entriesByID = entries.GroupBy(entry => entry.ID)
            .Select(g => g.ToList())
            .ToList();

答案 2 :(得分:0)

你也可以这样做:(非LINQ)

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

foreach (var v in entries)
    dictionary[v.ID].Add(v);