代码之家  ›  专栏  ›  技术社区  ›  Ryan Florence

如何从哈希中获取数据?

  •  1
  • Ryan Florence  · 技术社区  · 16 年前

    给出了这个哈希值:参数

    "positions"=>{
        "1"=>{"x"=>"50", "y"=>"30"}, 
        "2"=>{"x"=>"22", "y"=>"53"}, 
        "3"=>{"x"=>"68", "y"=>"35"}
     }
    

    我该怎么做?(不起作用,但试图展示我想做的事情)

    params[:positions].each do |position|
      logger.info(position.x)
    end
    

    我知道,痛苦的初学者…

    我得到了 NoMethodError (undefined method 'x' for ["1", {"x"=>"50", "y"=>"30"}]:Array)

    4 回复  |  直到 16 年前
        1
  •  13
  •   John Hyland    16 年前

    我想你想要的是

    params[:positions].each do |index, coords|
      logger.info(coords['x'])
    end
    

    如果您不关心索引,也可以使用 params[:positions].values.each do |coords| 相反。

        2
  •  3
  •   theIV    16 年前

    你可以这样做:

    positions = {
      "1"=>{"x"=>"50", "y"=>"30"},
      "2"=>{"x"=>"22", "y"=>"53"},
      "3"=>{"x"=>"68", "y"=>"35"}
    }
    
    positions.each_value do |hash|
      logger.info(hash['x'])
    end
    

    这个 each_value 方法将提取哈希(例如 {"x"=>"50", "y"=>"30"} )在这些散列中,您的键是字符串,因此您需要查看这些具有字符串键的散列。

        3
  •  1
  •   Jon Konrath    16 年前

    我想你在找位置[X]而不是位置.X。

        4
  •  0
  •   Julik    16 年前

    如果使用可枚举的哈希值,则需要捕获两个块变量(这会将键/值的数组“展开”为两个不同的变量)。另外,Ruby不使用点语法进行哈希(这不是javascript)。

     some_hash.each do | (key, value)
        puts value["x"]
     end
    

    这样可以避免您首先组装一个值数组(使用哈希值)。