2011-11-11 17 views
7

Zastanawiam się, jak uzyskać następny element na liście posortowanej w C#. Do tej pory mam wymyślić następującego kodu:C# Posortowana lista: Jak zdobyć następny element?

SortedList<int, Bla> mList; 

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

Nie jestem pewien, czy to najmądrzejszy sposób to zrobić ;-)

+0

określić typy dokładnie. –

+0

Jaki jest typ 'mList'? – ChrisWue

+0

Ups, przepraszam. Dodałem deklarację listy ... – Boris

Odpowiedz

7

Ponieważ można uzyskać dostęp do SortedList przez index (see the Remarks section), polecam przy użyciu następujących:

var index = mList.IndexOfKey(key); 
var first = mList.Values[index]; 
var second = mList.Values[index + 1]; 

ta będzie działać w tym samym O(log n) postaci pojedynczego odnośnika.

Tutaj także sposób LINQ to zrobić:

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

To będzie wyliczyć tylko raz. Będzie wykonywany w O(n).

+0

To faktycznie wykonało zadanie. Wielkie dzięki! – Boris

6

SortedList można dostać się zarówno klucz i indeksu

var IndexOfKey = mList.IndexOfKey(key); 

przyrost wartości indeksu

IndexOfKey++; //Handle last index case 

Zdobądź następny element według indeksu.

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

Czy ma to związek z 'SortedList '? SortedList under Generics nie hv 'GetByIndex' chyba źle zinterpretowałem coś – V4Vendetta

+0

@ V4Vendetta Myślę, że tak –

+3

Nope, SortedList nie ma GetByIndex ... – Boris

3

Zastosowanie wyliczający:

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

Ale OP myślałem, że już miał element, dla którego chciał znaleźć następny –

+0

To prawda. Chciałbym znaleźć element na liście (najlepiej bardzo szybko), a następnie iterować stamtąd ... – Boris

+0

To dostaje pierwsze 2 pozycje, a nawet nie przejmuje się patrzeniem na 'klucz'. –

Powiązane problemy