0

我有一个看起来应该很简单的问题,但令人惊讶的是我无法找到一个好的解决方案。也许我错过了一些明显的东西。

我有一个对象列表,我希望循环多次,测试,并计算对象满足我的测试条件的次数,如下所示:

var tallies = new List<Tuple<object, int>>();
foreach (var talliedObject in myObjects) {
    // Initialize
    tallies.add(new Tuple<object, int>(talliedObject, 0));
}
while (...) {
    updateTallies(tallies, stuffToCheckAgainst);
}

但问题是,我不能只说thisTuple.Item2++增加我的计数,因为元组的值是不可模仿的。aKeyValuePair的值也是如此。显然这都是设计使然,因为“可变结构是邪恶的”。为什么在这种情况下他们是邪恶的?我真的必须创建一个自定义类来存储我的对象以及我可以实际修改的关联整数吗?

4

2 回答 2

1

您可以将 Tuple 实例替换为新实例(计数增加)或使用不同的结构。

例如,使用字典:

var tallies = new Dictionary<object, int>();
foreach (var talliedObject in myObjects) {
    // Initialize
    tallies.add(talliedObject, 0);
}
while (...) {
    tallies[object] = tallies[object] + 1;
}
于 2013-06-06T14:55:14.060 回答
-1

我最终编写了自己的计数类:

/// <summary>
/// A class to keep a tally of a certain item for.
/// </summary>
/// <typeparam name="T">The type of the item to keep a tally for.</typeparam>
public class Tally<T> {
    public Tally(T initialTallyItem, ulong initialCountValue = 0) {
        this.Item = initialTallyItem;
        this.Count = initialCountValue;
    }

    public T Item { get; set; }
    public ulong Count { get; set; }
}

然后像这样使用它:

var validObjectTallies = new List<Tally<MyObject>>();
foreach (MyObject obj in myObjects) {
    validObjectTallies.Add(new Tally<MyObject>(obj));
}
foreach (var data in dataEntries) {
    foreach (var tally in validObjectTallies) {
        // Logic to check whether to increment tally... if we should increment:
        tally.Count++;
    }
}
于 2013-06-06T15:37:55.223 回答