C# elenco Ordinato: Come ottenere l’elemento successivo?

Sto chiedendo come ottenere l’elemento successivo in C# elenco ordinato. Finora ho creato il seguente codice:

SortedList<int, Bla> mList;

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

Non sono sicuro se questo è il modo più intelligente per farlo 😉

  • Specificare i tipi esattamente.
  • Qual è il tipo di mList?
  • Oops, scusate. Ho aggiunto la dichiarazione della lista…
  • Non si può solo tenere un indice separato variabile?
  • foreach (KeyValuePair<int P> entrata in mList){ … } ????
  • Utilizzare IndexOfKey e GetByIndex.
  • Se il post che come risposta ti votarlo. Tutti gli altri, qui sembra incapace di rispondere alla domanda che è stato effettivamente chiesto.

InformationsquelleAutor Boris | 2011-11-11

 

4 Replies
  1. 12

    Dal momento che è possibile accedere a una SortedList da indice (vedere la sezione Osservazioni), mi consiglia di utilizzare le seguenti:

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

    Questo lavoro nella stessa O(log n) come una singola ricerca.

    Ecco anche il LINQ modo per farlo:

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

    Questo sarà solo enumerare una volta. Si eseguirà in O(n).

    • Che in realtà ha fatto il lavoro. Grazie tantissime!!!
  2. 6

    SortedList si può accedere da indice e chiave

    var IndexOfKey = mList.IndexOfKey(key);

    Incremento dell’indice,

    IndexOfKey++; //Handle last index case

    Ottenere l’elemento successivo da indice.

    var nextElement = mList.GetByIndex(IndexOfKey);
    • Questo si riferisce ad SortedList<int, Bla> ? SortedList sotto Generics non hv GetByIndex, se ho frainteso qualcosa
    • Io la penso così
    • No, SortedList non hanno GetByIndex…
    • Ho pensato che si stava utilizzando SortList
    • Spero che l’voti non sono dal HansPassant suggerito questo nei commenti
    • Potere della suggestione 🙂 È una buona risposta, anche se, se GetByIndex esistito. In realtà, è necessario utilizzare mList.Values[index].
    • Nel SortList trovato su MSDN
    • Mi scuso, hai ragione. L’OP non ha originariamente specificare il SortedList, quindi questo è sicuramente una buona risposta.
    • devi essere scherzando, SortedList<int, Bla> non è la stessa come coppia chiave/valore di SortedList che considera Object
    • Il post originale non dire SortedList<int, Bla> … che info è stato aggiunto in seguito.

  3. 3

    Utilizzare enumeratore:

     IDictionaryEnumerator iterator = mList.GetEnumerator();
     iterator.MoveNext();
     Bla first = iterator.Value;
     iterator.MoveNext();
     Bla next = iterator.Value;
    • Ma l’OP ho pensato già avuto un elemento per il quale ha voluto per trovare la prossima
    • È vero. Mi piacerebbe trovare un elemento della lista (preferibilmente molto veloce) e poi iterare da lì…
    • Questo si ottiene i primi 2 elementi, e non ha nemmeno la briga di guardare il key.
  4. 0
    SortedList<int, Bla> mList;
    int key = 0;
    Bla someElement = mList.Values[key];
    
    ...
    key = 1;
    Bla next        = mList.Values[key];

Lascia un commento