これは、私が C# で何度も遭遇した問題ですが、一般的な解決策は見つかりませんでした。C++/STL では、キーを使用して各要素にアクセスすることなく、イテレータを使用してマップ内のすべての値を O(n) 時間で更新できます。SortedList、SortedDictionary などの C# コレクションで同様の動作を取得する方法はありますか?
私は次のようなことができます
foreach (int key in list.Keys)
{
list[key] *= 3;
}
ただし、キーを使用して各要素を検索するとlog(n)がかかるため、O(n * log(n))がかかります。
アイデアを与えるために、私は次のようなものを探しています:
SortedList<int, double> list = new SortedList<int,double>();
// Add few values fist
// E.g. first try ...
IList<double> values = list.Values;
for (int i = 0; i < values.Count; i++)
{
values[i] *= 3;
}
// E.g. second try
foreach (KeyValuePair<int, double> kv in list)
{
kv.Value *= 3;
}
List は既にソートされているため、値 (キーではなく) を同時に更新しながらトラバースできるはずです。実装上は問題ないように見えますが、何らかの理由で機能が利用できないようです。
また、同じ方法を使用して、既知の位置からその範囲内の別の変更値まで反復できるため、これは簡単なケースではありません。
サードパーティのライブラリを使用せずに、.NET のキー付きコレクションを使用して C# でこれを行う方法はありますか?
ありがとうございました
ジーブス