包含数组的数组的ruby哈希

包含数组的数组的ruby哈希,ruby,hash,Ruby,Hash,我正在学习ruby,在处理包含多维数组的哈希时遇到了一些问题 例如,我试图创建一个哈希,其中的键是城市名称。然后,在城市内部,我想要一个包含数据数组的数组 它应该是这样的: hash = {"chicago" => [["carl","blue"], ["ross", "red"]], "new york" => [ ["linda", "green"], ["john", "purple"], ["chris", "black"]]} 我如何才能做到这一点,以及如何访问/附加到每

我正在学习ruby,在处理包含多维数组的哈希时遇到了一些问题

例如,我试图创建一个哈希,其中的键是城市名称。然后,在城市内部,我想要一个包含数据数组的数组

它应该是这样的:

hash = {"chicago" => [["carl","blue"], ["ross", "red"]], "new york" => [ ["linda", "green"], ["john", "purple"], ["chris", "black"]]}
我如何才能做到这一点,以及如何访问/附加到每个键内部的数组

我一直在尝试这样的事情:

hash["chicago"][].push["new person", "color"]
谢谢,我知道这很琐碎,但我似乎不能用Ruby把我的头裹在里面。

这里有一个方法:

hash = Hash.new { |h,k| h[k] = [] }
hash["chicago"].push ["carl","blue"]
hash["chicago"].push ["ross", "red"]
hash
# => {"chicago"=>[["carl", "blue"], ["ross", "red"]]}

hash["new york"].push ["linda", "green"]
hash["new york"].push ["john", "purple"]

hash
# => {"chicago"=>[["carl", "blue"], ["ross", "red"]],
#     "new york"=>[["linda", "green"], ["john", "purple"]]}

如果指定了块,则将使用哈希对象和键调用该块,并应返回默认值。如果需要,块负责将值存储在散列中


我如何访问

根据您的需要使用或。这里有一种方法:

hash = Hash.new { |h,k| h[k] = [] }
hash["chicago"].push ["carl","blue"]
hash["chicago"].push ["ross", "red"]
hash
# => {"chicago"=>[["carl", "blue"], ["ross", "red"]]}

hash["new york"].push ["linda", "green"]
hash["new york"].push ["john", "purple"]

hash
# => {"chicago"=>[["carl", "blue"], ["ross", "red"]],
#     "new york"=>[["linda", "green"], ["john", "purple"]]}

如果指定了块,则将使用哈希对象和键调用该块,并应返回默认值。如果需要,块负责将值存储在散列中


我如何访问


根据您的需要使用或。将事情分解为步骤很有帮助。因此,我们知道
hash
是散列,
hash['chicago']
是数组数组的数组,因此我们可以看到我们想要推进
hash['chicago']
。这意味着你的代码唯一的错误就是你有一对额外的大括号。因此,我们得到:

hash['chicago'].push ['new person', 'yellow or something']

把事情分解成几个步骤是有帮助的。因此,我们知道
hash
是散列,
hash['chicago']
是数组数组的数组,因此我们可以看到我们想要推进
hash['chicago']
。这意味着你的代码唯一的错误就是你有一对额外的大括号。因此,我们得到:

hash['chicago'].push ['new person', 'yellow or something']

在这些情况下,我通常使用默认过程定义哈希,该过程确定当哈希中不存在给定密钥时应该发生什么:

hash = Hash.new {|h,k| h[k] = [] }
在本例中,默认值为空数组。将新数据添加到哈希中非常简单,如下所示:

hash["chicago"] << ["carl", "blue"]

在这些情况下,我通常使用默认过程定义哈希,该过程确定当哈希中不存在给定密钥时应该发生什么:

hash = Hash.new {|h,k| h[k] = [] }
在本例中,默认值为空数组。将新数据添加到哈希中非常简单,如下所示:

hash["chicago"] << ["carl", "blue"]

很好的解释。谢谢当学习认识到
push
是一种方法(而不是像数组一样的东西)时,它也很方便,因此
hash['chicago'].push(['newperson','yellow'或something'])
将与上面相同。明白了吗,顺便说一句,在ruby中这是一个让我受挫的东西。有3种语法方法来做每件事,它得到了令人困惑的解释。谢谢当学习认识到
push
是一种方法(而不是像数组一样的东西)时,它也很方便,因此
hash['chicago'].push(['newperson','yellow'或something'])
将与上面相同。明白了吗,顺便说一句,在ruby中,这是一个让我感到困惑的问题。有3种语法方法可以做任何事情,但它会让我感到困惑