如何在Ruby中创建哈希数组

24

我刚开始学习Ruby,现在想创建一个哈希数组(或者我是反过来了吗?)

def collection
  hash = { "firstname" => "Mark", "lastname" => "Martin", "age" => "24", "gender" => "M" }
  array = []
  array.push(hash)
  @collection = array[0][:firstname]
end

@collection在位置0的对象中没有显示firstname属性...我做错了什么?

提前感谢!

3个回答

51

你正在将Symbol用作索引,而Hash对象使用String作为键,因此只需这样做:

@collection = array[0]["firstname"]

我建议您使用Symbol作为Hash键,而不是String,因为Symbol被缓存,因此更有效率,所以这将是更好的解决方案:

def collection
  hash = { :firstname => "Mark", :lastname => "Martin", :age => 24, :gender => "M" }
  array = []
  array.push(hash)
  @collection = array[0][:firstname]
end

抱歉..我不明白..那么@collection应该是什么? - thedeepfield

3
您已将哈希的键定义为String。但是您现在尝试将其引用为Symbol,这样是行不通的。

请尝试:

@collection = array[0]["firstname"]

1
你可以做到这一点:

@collection = [{ "firstname" => "Mark", "lastname" => "Martin", "age" => "24", "gender" => "M" }]

这并没有解决原帖中的问题。我也不明白你提出的代码想要解决什么问题。由于这个问题仍然吸引着访问者,这个答案可能会让访问者感到困惑。我建议将其删除。 - pjvleeuwen
@PaulvanLeeuwen 我认为你是对的,这个答案更符合问题的标题,而问题本身问的是另一件事。如果我们完全从问题的上下文中删除数组,仍然会存在通过键访问哈希元素的问题。因此,我建议将问题标题重命名为“如何在Ruby中正确访问哈希元素”。因此,我认为有些人来到这里确切地是为了“在Ruby中创建哈希数组”,对他们来说这将是有用的。所以,如果我没有说服你,我会立即删除它)) - RustemMazitov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接