Tienen un valor de hash:

h = {:a => "val1", :b => "val2", :c => "val3"}

Puedo consultar el valor de hash:

h[:a], h[:c]

pero me gustaría hacer referencia al índice numérico:

h[0] => val1
h[2] => val3

Es posible?

  • Cuidado de la versión de Ruby diferencias cuando se utiliza values: 1.8.x no tiene ningún pedido, mientras que la más reciente Ruby han inserción de pedidos.
  • los valores hash son semánticamente desordenada; si usted necesita de matriz como la indexación de direcciones, tal vez usted quiere una diferente estructura de datos, o una clase que soporta ambos mecanismos.
  • Sin embargo, tienen un orden definido en el reciente versión de Ruby. Ahora, si esto debe ser tomado en cuenta para un algoritmo .. es de otro costal.
  • por lo tanto «semánticamente» 🙂 la adición de pedidos es muy débil sustituto para una real estructura ordenada. yo no dependen de ella, incluso en PHP, donde es prácticamente promocionado como una característica fundamental.
InformationsquelleAutor Lesha Pipiev | 2013-02-28

3 Comentarios

  1. 29
    h = {:a => "val1", :b => "val2", :c => "val3"}
    keys = h.keys
    
    h[keys[0]] # "val1"
    h[keys[2]] # "val3"
    • Por favor vea mis puntos de referencia a continuación. El uso de [h[h.keys[…]] es un poco lento para ser la mejor solución.
    • la solución también tiene más sentido para mí.
  2. 33

    h.values le dará una matriz solicitada.

    > h.values
    # ⇒ [
    #  [0] "val1",
    #  [1] "val2",
    #  [2] "val3"
    # ]

    UPD mientras que la respuesta con h[h.keys[0]] fue marcada como correcta, estoy un poco curioso con puntos de referencia:

    h = {:a => "val1", :b => "val2", :c => "val3"}
    Benchmark.bm do |x|
      x.report { 1_000_000.times { h[h.keys[0]] = 'ghgh'} } 
      x.report { 1_000_000.times { h.values[0] = 'ghgh'} }
    end  
    
    #
    #       user     system      total        real
    #   0.920000   0.000000   0.920000 (  0.922456)
    #   0.820000   0.000000   0.820000 (  0.824592)

    Parece que estamos escupiendo en el 10% de la productividad.

    • bonita explicación 🙂 +1 a usted también.
    • Ok.. Gracias por la respuesta!
  3. 5

    Por lo que necesita tanto de la matriz de la indización y el hash de la indexación ?

    Si usted necesita sólo el primero, el uso de una matriz.

    De lo contrario, puede hacer lo siguiente :

    h.values[0]
    h.values[1]

Dejar respuesta

Please enter your comment!
Please enter your name here