C#排序列表:如何获取下一个元素?

时间:2011-11-11 07:14:54

标签: c# sortedlist

我想知道如何在C#排序列表中获取下一个元素。到目前为止,我已经提出以下代码:

SortedList<int, Bla> mList;

Bla someElement = mList[key];
Bla next        = mList[mList.Keys[mList.IndexOfKey(key) + 1]];

我不确定这是否是最聪明的方法; - )

4 个答案:

答案 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];