如何对按嵌入列表分组的列表项进行计数
本文关键字:列表 | 更新日期: 2023-09-27 18:15:23
我有一个类,像
class MyClass
{
public DateTime Date { get; set; }
public List<int> IdList { get; set; }
public MyClass(DateTime initDate)
{
Date = initDate;
IdList = new List<int>();
}
}
,需要计算List<MyClass>
中的条目数,按IdList
中的每个int
分组。
我已经尝试了各种Linq结构,但我不能得到任何工作。以下是目前为止的内容:
List<MyClass> myc = new List<MyClass>();
myc.Add(new MyClass(new DateTime(2016, 1, 1)) { IdList = new List<int> { 1, 2 } });
myc.Add(new MyClass(new DateTime(2016, 1, 2)) { IdList = new List<int> { 1, 3 } });
myc.Add(new MyClass(new DateTime(2016, 1, 3)) { IdList = new List<int> { 1, 4 } });
myc.Add(new MyClass(new DateTime(2016, 1, 4)) { IdList = new List<int> { 5, 6 } });
myc.Add(new MyClass(new DateTime(2016, 1, 5)) { IdList = new List<int> { 2, 3 } });
var grouped = from p in myc
group p by p.IdList into g
select new { Id = g.Key, Count = g.Count() };
foreach (var x in grouped)
{
Console.WriteLine("ID: {0}, Count: {1}", x.Id, x.Count);
}
// Expecting output like:
// ID: 1, Count: 3
// ID: 2, Count : 2
// etc.
如果在MyClass
中有一个单一的int Id
属性,那将是直接的,但我无法弄清楚如何使用List<int>
。有没有其他方法可以替代编写嵌套循环和填充字典?谢谢你的帮助。
你可以使用SelectMany
var grouped = myc.SelectMany(x => x.IdList).GroupBy(x => x);
foreach (var i in g)
{
Console.WriteLine(string.Format("Id: {0}, Count: {1}", i.Key,i.Count()));
}
我不知道我是否正确理解了你的要求。但是试试这个,让我知道:
var groupedIds = myc.SelectMany(x => x.IdList.Select(i => i))
.GroupBy(x => x)
.ToList();
这里的小提琴
这里是SelectMany
文档所以你知道这段代码是什么意思
希望这对你有帮助!