2011-11-11 98 views
7

我想知道如何獲得C#排序列表中的下一個元素。到目前爲止,我想出了下面的代碼:C#排序列表:如何獲取下一個元素?

SortedList<int, Bla> mList; 

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

我不知道這是做;-)最聰明的方式

+0

指定類型完全相同。 – 2011-11-11 07:18:25

+0

'mList'的類型是什麼? – ChrisWue

+0

哎呀,對不起。我已經添加了列表聲明... – Boris

回答

7

既然你可以訪問SortedList通過index (see the Remarks section),我建議使用下列內容:

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)執行。

+0

這實際上完成了這項工作。非常感謝! – Boris

6

排序列表可以通過這兩個鍵和索引訪問

var IndexOfKey = mList.IndexOfKey(key); 

遞增的索引,

IndexOfKey++; //Handle last index case 

按索引獲取下一個項目。

var nextElement = mList.GetByIndex(IndexOfKey); 
+0

這是涉及到'SortedList '?泛型在排序列表不HV'GetByIndex'除非我誤解的東西 – V4Vendetta

+0

@ V4Vendetta我是這麼認爲的 –

+3

不,排序列表沒有GetByIndex ... – Boris

3

使用枚舉:

IDictionaryEnumerator iterator = mList.GetEnumerator(); 
iterator.MoveNext(); 
Bla first = iterator.Value; 
iterator.MoveNext(); 
Bla next = iterator.Value; 
+0

但我認爲OP已經有了一個他想要找到的元素 –

+0

這是真的。我想在列表中找到一個元素(最好是非常快),然後從那裏迭代... – Boris

+0

這會得到前兩個項目,甚至不會打擾看'key'。 –

相關問題