C#排序列表:如何获取下一个元素?
我想知道如何获取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
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不会出现hvGetByIndex
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];