none
Forma mas rápida de obtener un value de un diccionario a partir de su key RRS feed

  • Pregunta

  • Hola:

    ¿Cuál seria la forma mas rápida de obtener un valor de un diccionario por su clave y a la inversa, obtener su clave a partir de su valor?

    La que yo uso para obtener el valor dada su clave :        valor=diccionario[key];

    Pero al tener el diccionario muchos elementos, el proceso es lento.

    Un saludo y muchas gracias de nuevo a todos.

    miércoles, 24 de septiembre de 2014 13:14

Respuestas

  • >>Con lento me refiero al proceso de obtener la clave a partir de su valor.

    es que seguro va a ser lento, porque la coleccion no esta indexada en base al valor sino que lo esta en base a la key

    ademas es mucho 1millon de items para tenerlos en memoria

    >>¿Qué me recomiendas usar en lugar del diccionario para obtener la clave de un elemento dado su valor?

    podrias usar una lista y aplicar linq para buscar la informacion, quizas no sea mas rapido pero ante ese volumen de datos habria que ver si lo lento es la busqueda o todo el conjunto del codigo que defines

    como estas midiendo la lentitud? lo haces solo de la busqueda o de todo el codigo, la busqueda mas la operacion que realizas con esa informacion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP miércoles, 24 de septiembre de 2014 14:56
    • Propuesto como respuesta Christian AmadoMVP miércoles, 24 de septiembre de 2014 14:57
    • Marcado como respuesta rolsps miércoles, 24 de septiembre de 2014 15:12
    miércoles, 24 de septiembre de 2014 14:55

Todas las respuestas

  • hola

    obtener su valor desde la key no ha ciencia eso es directo, el diccionario esta optimizado para que sea asi

    string valor = dic["valorkey"];

    en este caso es un Dictionary<string, string>

    acceder al diccionario desde su valor eso si seguro sera lento porque no esta diseñador para entrar por el valor

    >>Pero al tener el diccionario muchos elementos, el proceso es lento.

    como que es lento? cuantos items tienes, no sera el proceso que realizas con el diccionario lo que esta lento

    quizas debas usar thread o parallel programming para optimizar el codigo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 24 de septiembre de 2014 13:21
  • Hola Leandro:

    Con lento me refiero al proceso de obtener la clave a partir de su valor.

    El diccionario contiene 1.000.000 de elementos.

    acceder al diccionario desde su valor eso si seguro sera lento porque no esta diseñador para entrar por el valor

    ¿Qué me recomiendas usar en lugar del diccionario para obtener la clave de un elemento dado su valor?

    Muchísimas gracias.

    Un saludo.

    miércoles, 24 de septiembre de 2014 14:37
  • >>Con lento me refiero al proceso de obtener la clave a partir de su valor.

    es que seguro va a ser lento, porque la coleccion no esta indexada en base al valor sino que lo esta en base a la key

    ademas es mucho 1millon de items para tenerlos en memoria

    >>¿Qué me recomiendas usar en lugar del diccionario para obtener la clave de un elemento dado su valor?

    podrias usar una lista y aplicar linq para buscar la informacion, quizas no sea mas rapido pero ante ese volumen de datos habria que ver si lo lento es la busqueda o todo el conjunto del codigo que defines

    como estas midiendo la lentitud? lo haces solo de la busqueda o de todo el codigo, la busqueda mas la operacion que realizas con esa informacion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP miércoles, 24 de septiembre de 2014 14:56
    • Propuesto como respuesta Christian AmadoMVP miércoles, 24 de septiembre de 2014 14:57
    • Marcado como respuesta rolsps miércoles, 24 de septiembre de 2014 15:12
    miércoles, 24 de septiembre de 2014 14:55
  • Hola Leandro:

    Mido sólo la búsqueda.

    Hare pruebas con lo que me comentas.

    Muchísimas gracias.

    miércoles, 24 de septiembre de 2014 15:14
  • Hola, he probado a crear un diccionario<string,string> con 1.000.000 de elementos y la siguiente query linq y la busqueda es instantanea

    string key = dict.Where(p => p.Value == "VALOR").FirstOrDefault().Key;

    Pruebas y me cuentas.

    Saludos!!!


    Víctor del Valle - http://www.vrdelvalle.net

    miércoles, 24 de septiembre de 2014 15:19