Estoy buscando una estructura que contenga un conjunto ordenado de valores dobles. Deseo consultar este conjunto para encontrar el valor más cercano a un valor de referencia específico.En C#, ¿hay algún tipo de SortedList <double> que permita consultas rápidas (con LINQ) para el valor más cercano?
He consultado el SortedList<double, double>
, y me ha ido bastante bien. Sin embargo, dado que no necesito pares clave/valor explícitos. esto parece ser excesivo para mí, y me pregunto si podría hacerlo más rápido.
Condiciones:
- La estructura se inicializa sólo una vez, y que nunca cambian (sin inserto/eliminaciones)
- La cantidad de valores es en el rango de 100K.
- La estructura se consulta a menudo con nuevas referencias, que deben ejecutar rápido.
- Por simplicidad y velocidad, el valor del conjunto justo por debajo de la referencia se puede devolver, no en realidad el valor más cercano
- Quiero usar LINQ para la consulta, si es posible, por simplicidad de código.
- No quiero utilizar código de terceros si es posible. .NET 3.5 está disponible.
- velocidad es más importand de huella de memoria
Actualmente utilizo el siguiente código, donde SortedValues
es el ya mencionado SortedList
IEnumerable<double> nearest = from item in SortedValues.Keys
where item <= suggestion
select item;
return nearest.ElementAt(nearest.Count() - 1);
¿Puedo hacer más rápido?
Además, no estoy 100% seguro, si este código es realmente seguro. IEnumerable
, el tipo de devolución de mi consulta ya no está ordenada por definición. Sin embargo, una prueba de Unidad con una gran base de datos de prueba ha demostrado que es en la práctica, por lo que esto funciona para mí. ¿Tiene pistas sobre este aspecto?
P.S. Sé que hay muchas preguntas similares, pero ninguna realmente responde a mis necesidades específicas. Especialmente está este C# Data Structure Like Dictionary But Without A Value, pero el interlocutor solo quiere verificar la existencia y no encontrar nada.
Depends con qué frecuencia desea buscar un artículo más cercano con respecto a la frecuencia con la que se actualiza la lista. –
Ver la pregunta. La lista nunca tendrá inserciones o eliminaciones. –
Guau, habla de abusar de los valores devueltos. – Eric