node new net generar createxml create crear con asp c# xml collections

c# - new - ¿Qué tipo de colección debo usar?



generar xml en c# (2)

10K registros no es mucho.

Un Dictionary<string,decimal> se ajustaría a la factura. Puede ordenar por clave o por valor usando LINQ, así como hacer búsquedas.

Esto supone que los nombres de los productos son únicos.

Tengo aproximadamente 10,000 registros. Cada registro tiene 2 campos: un campo es una cadena de hasta 300 caracteres de longitud y el otro campo es un valor decimal. Esto es como un catálogo de productos con nombres de productos y el precio de cada producto.

Lo que tengo que hacer es permitir que el usuario escriba cualquier palabra y muestre todos los productos que contienen esa palabra junto con sus precios en un cuadro de lista. Eso es todo.

  1. ¿Qué tipo de colección es la mejor para este escenario?
  2. Si necesito ordenar en función del nombre del producto o el precio, ¿la elección seguirá siendo la misma?

En este momento estoy usando un archivo XML, pero pensé que usar una colección para poder insertar todos los valores en el código es más simple. Gracias por tus sugerencias


Un diccionario hará el trabajo. Sin embargo, si realiza coincidencias parciales rápidas (p. Ej. Búsqueda a medida que el usuario escribe), puede obtener un mejor rendimiento creando varias claves que apuntan al mismo elemento. Por ejemplo, la palabra "Apple" podría ubicarse con "Ap", "App", "Appl" y "Apple".

He utilizado este enfoque en una cantidad similar de registros con muy buenos resultados. He convertido mis artículos fuente de 10K en aproximadamente 50,000 claves únicas. Cada una de estas entradas del diccionario apunta a una lista que contiene referencias a todas las coincidencias para ese término. A continuación, puede buscar esta lista mucho más pequeña de manera más eficiente. A pesar de la gran cantidad de listas que esto crea, la huella de memoria es bastante razonable.

También puede crear sus propias claves si lo desea para redirigir errores ortográficos comunes o señalar elementos relacionados. Esto también elimina la mayoría de los problemas con claves únicas porque cada tecla apunta a una lista. Un solo artículo puede clasificarse por cada una de las palabras en su nombre; esto es extremadamente útil si tiene nombres largos de productos con múltiples palabras. Al clasificar sus artículos, cada palabra en el nombre se puede asignar a una o más claves.

También debo señalar que construir y clasificar elementos de 10K no debería tomar mucho tiempo si se hace correctamente (un par de cientos de milisegundos es razonable). Los resultados se pueden almacenar en la Cache caché durante el tiempo que desee utilizando la Application , la Cache o los miembros estáticos.

Para resumir, la estructura resultante es un Dictionary<string, List<T>> donde la cadena es una clave corta (de 2 a 6 caracteres funciona bien) pero única. Cada tecla apunta a una List<T> (u otra colección, si así lo desea) de elementos que coinciden con esa clave. Cuando se realiza una búsqueda, busca la clave que coincide con el término proporcionado por el usuario. Dependiendo de la longitud de sus claves, puede truncar la búsqueda del usuario a su longitud máxima de clave. Después de ubicar la colección de elementos secundarios correcta, busque esa colección para una coincidencia completa o parcial con la metodología que desee.

Por último, es posible que desee crear una estructura ligera para cada elemento de la lista, de modo que pueda almacenar información adicional sobre el artículo. Por ejemplo, puede crear una pequeña clase de Producto que almacene el nombre, precio, departamento y popularidad del producto. Esto puede ayudarlo a refinar los resultados que muestra al usuario.

Con todo, puede realizar búsquedas borrosas, detalladas y inteligentes en tiempo real.

Las estructuras antes mencionadas deberían proporcionar una funcionalidad más o menos equivalente a una trie .