我想知道如何获取 C# 排序列表中的下一个元素。到目前为止,我想出了以下代码:
SortedList<int, Bla> mList;
Bla someElement = mList[key];
Bla next = mList[mList.Keys[mList.IndexOfKey(key) + 1]];
我不确定那是否是最明智的方式;-)
我想知道如何获取 C# 排序列表中的下一个元素。到目前为止,我想出了以下代码:
SortedList<int, Bla> mList;
Bla someElement = mList[key];
Bla next = mList[mList.Keys[mList.IndexOfKey(key) + 1]];
我不确定那是否是最明智的方式;-)
既然可以通过索引(参见备注部分)来访问SortedList
,我建议使用以下代码:
var index = mList.IndexOfKey(key);
var first = mList.Values[index];
var second = mList.Values[index + 1];
使用这种方法查找的复杂度为单次查找的 O(log n)
复杂度。
下面是使用 LINQ 的方式:
var items = mList.SkipWhile(m => m.Key != key).Select(m => m.Value).Take(2).ToList(); // Avoid double-enumeration by calling ToList
var first = mList[0];
var second = mList[1];
这将仅枚举一次。它会以 O(n)
的时间复杂度执行。
SortedList 可以通过键和索引进行访问。
var IndexOfKey = mList.IndexOfKey(key);
增加索引值,
IndexOfKey++; //Handle last index case
通过索引获取下一个项目。
var nextElement = mList.GetByIndex(IndexOfKey);
SortedList<int, Bla>
有关吗?在泛型下,SortedList 没有 GetByIndex
,除非我理解错了什么。 - V4VendettaGetByIndex
,这是一个很好的答案。但实际上,你必须使用 mList.Values[index]
。 - Scott Rippey使用枚举器:
IDictionaryEnumerator iterator = mList.GetEnumerator();
iterator.MoveNext();
Bla first = iterator.Value;
iterator.MoveNext();
Bla next = iterator.Value;
SortedList<int, Bla> mList;
int key = 0;
Bla someElement = mList.Values[key];
...
key = 1;
Bla next = mList.Values[key];