我想知道如何獲得C#排序列表中的下一個元素。到目前爲止,我想出了下面的代碼:C#排序列表:如何獲取下一個元素?
SortedList<int, Bla> mList;
Bla someElement = mList[key];
Bla next = mList[mList.Keys[mList.IndexOfKey(key) + 1]];
我不知道這是做;-)最聰明的方式
我想知道如何獲得C#排序列表中的下一個元素。到目前爲止,我想出了下面的代碼:C#排序列表:如何獲取下一個元素?
SortedList<int, Bla> mList;
Bla someElement = mList[key];
Bla next = mList[mList.Keys[mList.IndexOfKey(key) + 1]];
我不知道這是做;-)最聰明的方式
既然你可以訪問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)
執行。
這實際上完成了這項工作。非常感謝! – Boris
排序列表可以通過這兩個鍵和索引訪問
var IndexOfKey = mList.IndexOfKey(key);
遞增的索引,
IndexOfKey++; //Handle last index case
按索引獲取下一個項目。
var nextElement = mList.GetByIndex(IndexOfKey);
這是涉及到'SortedList
@ V4Vendetta我是這麼認爲的 –
不,排序列表沒有GetByIndex ... – Boris
使用枚舉:
IDictionaryEnumerator iterator = mList.GetEnumerator();
iterator.MoveNext();
Bla first = iterator.Value;
iterator.MoveNext();
Bla next = iterator.Value;
但我認爲OP已經有了一個他想要找到的元素 –
這是真的。我想在列表中找到一個元素(最好是非常快),然後從那裏迭代... – Boris
這會得到前兩個項目,甚至不會打擾看'key'。 –
指定類型完全相同。 – 2011-11-11 07:18:25
'mList'的類型是什麼? – ChrisWue
哎呀,對不起。我已經添加了列表聲明... – Boris