A menudo me encuentro creando tablas de búsqueda en Ruby, generalmente para almacenar en caché algunos cálculos costosos o para construir algo que estoy pasando a una vista. Me imagino que debe haber un lenguaje corto y legible para esto, pero no pudimos pensar en uno. Por ejemplo, supongamos que quiero comenzar conmatriz de Ruby a un hash indexado?
[65, 66, 67, ...]
y terminar con
{65 => "A", 66 => "B", 67 => "C", ...}
Los no-absolutamente-bastante-suficientes modismos podríamos pensar incluyen:
array = (65..90).to_a
array.inject({}) {|hash, key| hash[key]=key.chr; hash}
{}.tap {|hash| array.each {|key| hash[key] = key.chr}}
Hash[array.zip(array.map{|key| key.chr})]
Pero todos estos son un poco dolorosos: difíciles de leer, fáciles de estropear, no claros en el intento. Seguramente Ruby (o algún ayudante de Rails) tiene algo de magia para esto?
Wow. Nunca hubiera adivinado que un grupo de pares de arreglos habría sido interpretado de esa manera. Hubiera esperado que se convirtiera en {[65, "A"] => [66, "B"], [67, "C"] => [68, "D"], ...}. Eso me asusta un poco, pero aún así lo usaré. ¡Gracias! –
@William: Puede usar ['Hash. []'] (Http://apidock.com/ruby/Hash/%5B%5D/class) en dos formas: 'Hash [clave, valor, clave, valor, ...] 'o' Hash [[[clave, valor], [clave, valor], ...]] 'con la matriz interna representando cualquier par de claves de clave/valor enumerable. Recuerde que en Ruby, hay más de uno para hacerlo: P Además, agregué otra sugerencia usando facetas. –
Efectivamente. Justo ahí en los documentos. ¡Gracias! Definitivamente también revisaré Facets; se ve muy bien. –