处理元组列表:计算项数

本文关键字:计算 元组 列表 处理 | 更新日期: 2023-09-27 17:51:15

我有下面的代码处理元组。输入是项目列表,输出是元组列表,我们需要计算每个日期的项目数量。

List<Tuple<DateTime, int>> list = new List<Tuple<DateTime, int>>();
foreach (ItemClass item in items)
{
    foreach(Tuple<DateTime, int> tuple in list)
    {
         if (tuple.Item1 == item.date)
         {
              tuple.Item2++;
              continue;
          }
    }
    list.Add(Tuple.Create<DateTime, int>(item.date, 1)); 
}

这个代码目前不能编译,因为Item2是只读的,问题是如何使它工作?

早些时候这与Dictionary一起工作,但我不得不删除它,因为外部代码与Dictionary一起工作是不可接受的。

处理元组列表:计算项数

元组不适用于需要可变性的场景。您可以创建自己的类,将DateTime与可变整数计数器结合在一起,但您也可以使用LINQ来完成,在最后将其转换为元组列表:

var list = items
    .GroupBy(item => item.date)
    .Select(g => Tuple.Create(g.Key, g.Count()))
    .ToList();

上面的代码为每个日期创建一个组,然后只有当每个组中的最终项目计数已知时才生成元组。

尝试使用Linq, GroupBy()按日期分组,然后使用Select()并为每个组创建一个元组,最后使用ToList()转换为列表。就像

var result = items.GroupBy(x => x.Date)
                  .Select(x => Tuple.Create(x.Key, x.Count()))
                  .ToList();

我假设因为它是只读的它已经有一个属性,我想我以前用过tuple所以是的,它可能有

也许你不能编辑它,因为你可以在Foreach()循环中编辑迭代器,也许可以尝试另一种循环。

将item2对象设置为当前循环之外的对象,并使用该对象代替迭代器。