我有以下代码使用Tuples。输入是项目列表,输出是元组列表,我们需要基本计算每个日期的项目数。
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
。
答案 0 :(得分:7)
元组不适用于需要可变性的场景。您可以创建自己的类,它将DateTime
与可变整数计数器组合在一起,但您也可以使用LINQ,在最后转换为元组列表:
var list = items
.GroupBy(item => item.date)
.Select(g => Tuple.Create(g.Key, g.Count()))
.ToList();
上面的代码为每个日期创建一个组,然后只有在知道每个组中项目的最终计数时才生成元组。
答案 1 :(得分:4)
尝试使用Linq,GroupBy()
按日期分组,然后使用Select()
为每个组创建一个元组,最后使用ToList()
转换为列表。像
var result = items.GroupBy(x => x.Date)
.Select(x => Tuple.Create(x.Key, x.Count()))
.ToList();
答案 2 :(得分:-1)
我假设是因为它只读它已经有了属性,我想我之前已经使用了元组,所以是的,它可能就是这样。
也许你无法编辑它,因为你可以在Foreach()循环中编辑迭代器,也许可以尝试另一种循环。
OR
将item2对象设置为当前循环之外的对象,并使用它而不是迭代器。