从对象列表创建多维数组

本文关键字:数组 创建 对象 列表 | 更新日期: 2023-09-27 18:05:17

我有一个"Entry"对象列表(每个都有一个ID),并希望创建一个2D数组,基于分裂他们的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中是否有更好的方法。

从对象列表创建多维数组

您一定需要它是一个列表按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();

…但我还是会选择查找

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

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

您也可以这样做:(Non-LINQ)

Dictionary<int , List<Entry>> dictionary = new ...
foreach (var v in entries)
    dictionary[v.ID].Add(v);