Es difícil implementar esto de manera eficiente con un SortedDictionary<TKey, TValue>
ya que se implementa como un árbol binario de búsqueda que no exponga predecesores o sucesores.
Por supuesto, puede simplemente enumerar cada KeyValuePair hasta que encuentre la clave "conocida". Con un poco de LINQ, esto se vería así (suponiendo que la clave sin duda existe y no es la primera clave):
SortedDictionary<int, int> dictionary = ...
int knownKey = ...
var previousKvp = dictionary.TakeWhile(kvp => kvp.Key != knownKey)
.Last();
Si estos supuestos no se sostienen, se podría hacer:
var maybePreviousKvp = dictionary.TakeWhile(kvp => kvp.Key != knownKey)
.Cast<KeyValuePair<int, int>?>()
.LastOrDefault();
(Compruebe que maybePreviousKvp != null
comprobar que la KeyValuePair anterior fue recuperado satisfactoriamente.)
Pero esto no va a ser eficiente en absoluto.
Si es posible, considere el uso de un SortedList<TKey, TValue>
lugar (obviamente, esto puede no ser posible si usted no puede tomar sus inserciones y eliminaciones más lentos). Esta colección admite claves eficientes y recuperación de valores por ordenado índice ya que se implementa como una matriz cultivable. A continuación, la consulta se vuelve tan simple como:
SortedList<int, int> dictionary = ...
int knownKey = ...
int indexOfPrevious = dictionary.IndexOfKey(knownKey) - 1;
// if "known" key exists and isn't the first key
if(indexOfPrevious >= 0)
{
// Wrap these in a KeyValuePair if necessary
int previousKey = dictionary.Keys[indexOfPrevious];
int previousValue = dictionary.Values[indexOfPrevious];
}
ejecuta una búsqueda binaria sobre las teclas de vinos, lo que se ejecuta en O(log n)
tiempo. Todo lo demás debería ejecutarse en tiempo constante, lo que significa que toda la operación debería ejecutarse en tiempo logarítmico.
De lo contrario, tendrá que aplicar a sí mismo/BST encontrar una colección que hace exponer predecesores/sucesores.
SortedDictionary diccionario = new SortedDictionary (); –
PramodChoudhari
Me atrevo a preguntar "¿Por qué?" –
Creo que las respuestas a [esta pregunta] (http://stackoverflow.com/questions/931891/sorted-dictionary-in-c) explican cómo hacer lo que desea. –