从对象列表创建多维数组
本文关键字:数组 创建 对象 列表 | 更新日期: 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);