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++しかし、問題は、 Tuple の値が不変であるため、集計をインクリメントするとは言えません。KeyValuePairの値も同様です。「変更可能な構造体は悪」であるため、これはすべて設計によるものです。この場合、なぜ彼らは悪なのですか?実際に変更できる関連する整数とともにオブジェクトを格納するカスタム クラスを作成する必要がありますか?

4

2 に答える 2

-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 に答える