我正在学习ruby,并且在处理包含多维数组的散列时遇到了一些困难。
例如,我正在尝试创建一个具有城市名称的键的散列。然后,在那个城市里,我想要一个数组,其中包含数据数组。
它应该是这样的:
hash = {"chicago" => [["carl","blue"], ["ross", "red"]], "new york" => [ ["linda", "green"], ["john", "purple"], ["chris", "black"]]}如何使此工作,以及如何访问/附加到每个键内的数组?
我一直在尝试这样的方法:
hash["chicago"][].push["new person", "color"]谢谢,我知道这很琐碎,但是我似乎不能把我的头放在Ruby里面。
发布于 2014-04-18 20:20:30
把事情分解成几个步骤是有帮助的。因此,我们知道hash是哈希,而hash['chicago']是数组的数组,因此我们可以看到我们想要推入hash['chicago']。这意味着,您的代码唯一的问题是,您有一个额外的大括号。所以我们得到:
hash['chicago'].push ['new person', 'yellow or something']发布于 2014-04-18 20:20:46
在这些情况下,我通常用默认的proc定义哈希,该进程确定当哈希中没有给定的键时应该发生什么:
hash = Hash.new {|h,k| h[k] = [] }在这种情况下,默认值是空数组。然后,向哈希中添加新数据非常简单:
hash["chicago"] << ["carl", "blue"]注意--如果您正在进行查找,缺失的值将被表示为空数组。您可以使用fetch而不是方括号符号来解决这个问题:
hash.fetch("chicago", nil) #=> [["carl", "blue"]]
hash.fetch("new york", nil) #=> nil发布于 2014-04-18 20:19:57
以下是一种方法:
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"]]}来自new {|hash, key| block } → new_hash
如果指定了块,则将使用散列对象和键调用该块,并应返回默认值。如果需要,块有责任将值存储在哈希中。
我怎样才能进入?
同样使用Hash#fetch或Hash#[],这符合您的需要。
https://stackoverflow.com/questions/23161628
复制相似问题