代码之家  ›  专栏  ›  技术社区  ›  Lesha Pipiev

如何通过数字索引获取哈希值

  •  30
  • Lesha Pipiev  · 技术社区  · 13 年前

    有一个散列:

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

    我可以参考哈希值:

    h[:a], h[:c]
    

    但我想用数字索引表示:

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

    有可能吗?

    3 回复  |  直到 13 年前
        1
  •  38
  •   Aleksei Matiushkin    13 年前

    h.values 会给你一个请求的数组。

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

    更新 而答案是 h[h.keys[0]] 被标记为正确,我对基准有点好奇:

    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)
    

    看起来是在浪费10%的生产力。

        2
  •  35
  •   saihgala    13 年前
    h = {:a => "val1", :b => "val2", :c => "val3"}
    keys = h.keys
    
    h[keys[0]] # "val1"
    h[keys[2]] # "val3"
    
        3
  •  5
  •   Intrepidd    13 年前

    那么您需要数组索引和哈希索引吗?

    如果只需要第一个,请使用数组。

    否则,您可以执行以下操作:

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