我想知道如何在C#排序列表中获取下一个元素。到目前为止,我已经提出以下代码:
SortedList<int, Bla> mList;
Bla someElement = mList[key];
Bla next = mList[mList.Keys[mList.IndexOfKey(key) + 1]];
我不确定这是否是最聪明的方法; - )
答案 0 :(得分:12)
由于您可以index (see the Remarks section)访问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)
中执行。
答案 1 :(得分:6)
SortedList
var IndexOfKey = mList.IndexOfKey(key);
增加索引,
IndexOfKey++; //Handle last index case
按索引获取下一个项目。
var nextElement = mList.GetByIndex(IndexOfKey);
答案 2 :(得分:3)
使用枚举器:
IDictionaryEnumerator iterator = mList.GetEnumerator();
iterator.MoveNext();
Bla first = iterator.Value;
iterator.MoveNext();
Bla next = iterator.Value;
答案 3 :(得分:-1)
SortedList<int, Bla> mList;
int key = 0;
Bla someElement = mList.Values[key];
...
key = 1;
Bla next = mList.Values[key];