ruby - Cómo agregar un valor a un hash existente sin una clave
Necesito asignar los números 0-100000 a un hash sin dar una clave.
Ruby usa Murmur como función hash. ¿Cómo puedo agregar un valor sin tener una clave, como en C, dejándolo manejar la colisión y otras cosas? ¿Es posible? ¿Puedo darle solo el valor al hash y dejar que evalúe la clave y luego insertarlo en sí mismo?
En una operación hash normal, tenemos una función hash y una tabla. Usamos el valor como argumento de la función hash, luego obtenemos una clave a cambio. ElEl valor se inserta en la ubicación de la clave en la tabla (si ocurre una colisión, se usa doble hashing o algo más).
¿Es posible hacer el mismo tipo de hashing en Ruby? ¿O estoy atascado con las formas predeterminadas? ¿Puedo simplemente arrojar el valor en una función, luego evalúa la clave e inserta el valor en la tabla hash o no?
------------Respuesta------------
Simplemente guárdelo en el hash usando el hash calculado de la clave, en lugar de la clave misma:
hash[hash_func(key)] = value
JEs decir, en lugar de asignar clave -> valor directamente, esto asigna hash_func (clave) -> valor. La implementación puede pasar el valor de su clave hash a través de otra función hash internamente, pero eso no es necesario que le importe.
Sin embargo, en los comentarios ahora sale a la luz que desea aplicar la función hash al valor, no a cualquier otra clave. En ese caso, solo use un conjunto y termine con eso. Luego, todo lo que necesita hacer es agregar valores al conjunto:
s = Set.new
s.add(value)
No hay necesidad de calcular el hash of cualquier cosa; Set se encargará de ello por ti.
En resumen, este parece ser un caso del Problema XY. Necesitaba almacenar un conjunto de valores en una estructura de datos (y presumiblemente poder verificar si esos valores se almacenaron de manera eficiente). En lugar de preguntar sobre esto, preguntó sobre funciones hash y tablas. Si hubiera preguntado sobre lo que realmente necesitaba, en lugar de preguntar sobre otra cosa que pensó que podría usar para resolver el problema original, habría tenido una respuesta útil.respuesta mucho más rápida.
------------Respuesta------------
La solución común es simplemente usar el valor como clave. Por lo tanto:
value = "xxx"
hash[value] = 1
De esta manera, documenta claramente que los valores reales (todos 1) de este hash en particular no sirven y obtendrá valores desduplicados. Hash hará el hashing habitual internamente, no necesita preocuparse por eso en absoluto.
Utilizo 1 como valor aquí, pero el valor real es completamente irrelevante. No uso nil ya que esa es la definición.valor devuelto por defecto de hash[nonexistant_value].
Si sus valores son más complejos, consulte http://docs.ruby-lang.org/en/2.0.0/Hash.html para obtener información específica sobre ellos.
Artículos relacionados:
Reindexar elasticsearch 2.3.3 cuando se usa Java NodeClient
- algoritmo - tarea de asignación de recursos
- errores del compilador: no todas las rutas de código devuelven un valor (C#)
- ios - ¿Cómo puedo asignar estos objetos antes de que ocurra el desenvolvimiento?
- Android: el botón de imagen con sonido no funciona
- php - Respuesta separada para la función phpmailer de los dos destinatarios
- Ruby on Rails: encadenamiento de alcances de parámetros de formas separadas
- aprendizaje automático: prediga usando el paquete randomForest en R
- scala - Reemplazar todo ":" con "_" en el marco de datos de Spark
- Se agotó el tiempo de espera del latido del ejecutor Spark en DataProc
- c++ - Cómo optimizar este programa c para encontrar la descomposición en factores primos de un número
- java - Cómo mezclar y reproducir un archivo de audio desde una matriz
- c++ - error: no hay coincidencia para 'operador>>'
- java: el evento OnClick solo funciona la segunda vez
- mecanografiado - ¿Cómo pasar un segundo parámetro de ruta al módulo de servicios angular 2?
- mysql - Aviso de PHP: conversión de matriz a cadena y tipos de operandos no admitidos en
Artículos calientes
- medicina china para la bronquitis
- Diferencia entre infección de las vías respiratorias superiores y bronquitis
- ¿Qué causa la epididimitis?
- Criterios diagnósticos de cálculos renales
- ¿Qué medicamento la masturbación causa prostatitis?
- ¿Cuáles son los factores de padecer gota?
- Qué comer durante la convalecencia de una hemorragia cerebral
- que es el alzheimer
- Principales criterios diagnósticos de las bronquiectasias
- ¿Cuáles son las formas de prevenir y tratar la menstruación irregular en las mujeres?
- Síntomas de gota de ternera
- Saco gestacional de 5x4mm cuanto dura el embarazo
- La diferencia entre espinillas y espinillas de ácaros
- Por qué frotar con jengibre puede tratar la caída del cabello
- ¿Cuánto tiempo se puede vivir con insuficiencia hepática?