¿Hay una función de límite inferior en SortedList<K ,V>
? La función debe devolver el primer elemento igual o superior a la clave especificada. ¿Hay alguna otra clase que apoye esto?¿Hay una función de límite inferior en una SortedList <K ,V>?
Chicos - por favor lea la pregunta una vez más. No necesito una función que devuelva la clave si está presente. Me interesa el escenario cuando no coinciden las claves exactas.
Me gusta 0 (horario de verano). Significa que no tengo un problema con foreach loop, pero me gustaría tener una forma eficiente de hacerlo.
He hecho algunas pruebas al respecto.
Las sentencias de Linq no son optimizadas ni por el compilador ni por la máquina de tiempo de ejecución, por lo que recorren todos los elementos de la colección y son lentos O (n). Sobre la base de la respuesta Mehrdad Afshari, aquí es una búsqueda binaria que funciona en O (log n) en la Recogida de llaves:
public static int FindFirstIndexGreaterThanOrEqualTo<T>(
this IList<T> sortedCollection, T key
) where T : IComparable<T> {
int begin = 0;
int end = sortedCollection.Count;
while (end > begin) {
int index = (begin + end)/2;
T el = sortedCollection[index];
if (el.CompareTo(key) >= 0)
end = index;
else
begin = index + 1;
}
return end;
}
¿No se genera la colección cada vez que leemos la propiedad Keys? – agsamek
agsamek: No, no está regenerado. Devolverá una instancia de la clase interna KeyList que proporciona acceso directo a los elementos en la colección original. Nada se copia en el proceso. –
La "no copia de Claves y valores" es la principal diferencia con SortedDictionary –