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

C#排序列表:如何获取下一个元素?,c#,sortedlist,C#,Sortedlist,我想知道如何获取C#排序列表中的下一个元素。到目前为止,我已经提出了以下代码: SortedList<int, Bla> mList; Bla someElement = mList[key]; Bla next = mList[mList.Keys[mList.IndexOfKey(key) + 1]]; SortedList-mList; Bla someElement=mList[key]; Bla next=mList[mList.Keys[mList.In

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

SortedList<int, Bla> mList;

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

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

可通过键和索引访问SortedList

var IndexOfKey = mList.IndexOfKey(key);
增加索引

IndexOfKey++; //Handle last index case
按索引获取下一项

var nextElement = mList.GetByIndex(IndexOfKey);

由于您可以通过访问
SortedList
,因此我建议您使用以下方法:

var index = mList.IndexOfKey(key);
var first = mList.Values[index];
var second = mList.Values[index + 1];
这将在与单个查找相同的
O(logn)
中工作

以下是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)
中执行

使用枚举器:

 IDictionaryEnumerator iterator = mList.GetEnumerator();
 iterator.MoveNext();
 Bla first = iterator.Value;
 iterator.MoveNext();
 Bla next = iterator.Value;
SortedList-mList;
int键=0;
Bla someElement=mList.Values[key];
...
键=1;
Bla next=mList.Values[key];

Oops,对不起。我已经添加了列表的声明…你不能只保留一个单独的索引变量吗?foreach(mList中的KeyValuePair条目){…}???使用IndexOfKey和GetByIndex。@HansPassant如果你把它作为一个答案发布,我会更新它。这里的其他人似乎都无法回答实际提出的问题。这是否与
SortedList
有关?除非我误解了,否则泛型下的SortedList不会出现hv
GetByIndex
something@Boris... 我以为你在用我希望不是因为HansPassant在comments@V4Vendetta建议的力量:)不过,如果存在
GetByIndex
,这是一个很好的答案。实际上,您必须使用msdnb上的SortList中的
mList.Values[index]
@scottripey,但我认为OP已经有了一个元素,他希望找到下一个元素,这是真的。我想在列表中找到一个元素(最好是非常快的),然后从那里进行迭代……这将得到前两项,甚至不需要查看实际完成任务的
键。非常感谢!
SortedList<int, Bla> mList;
int key = 0;
Bla someElement = mList.Values[key];

...
key = 1;
Bla next        = mList.Values[key];