这是我在C#中反复遇到的一个问题,但一直没有找到通用的解决方案。在 C++/STL 中,可以使用迭代器在 O(n) 时间内更新映射中的所有值,而无需使用键来访问每个元素。有没有办法获得与任何 C# 集合(如 SortedList、SortedDictionary)类似的行为?
我可以做类似的事情
foreach (int key in list.Keys)
{
list[key] *= 3;
}
但这需要 O(n * log(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 已经排序,因此应该可以遍历它同时更新值(而不是键)。从实现的角度来看,这似乎没有问题,但由于某种原因,该功能似乎不可用。
这也不是一个简单的情况,因为可以使用相同的方法从已知位置迭代到该范围内的另一个修改值。
有没有办法在 C# 中使用 .NET 中的任何键控集合而不使用 3rd 方库来执行此操作?
谢谢
吉夫斯