首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含数组的ruby散列

包含数组的ruby散列
EN

Stack Overflow用户
提问于 2014-04-18 20:16:58
回答 3查看 105关注 0票数 0

我正在学习ruby,并且在处理包含多维数组的散列时遇到了一些困难。

例如,我正在尝试创建一个具有城市名称的键的散列。然后,在那个城市里,我想要一个数组,其中包含数据数组。

它应该是这样的:

代码语言:javascript
复制
hash = {"chicago" => [["carl","blue"], ["ross", "red"]], "new york" => [ ["linda", "green"], ["john", "purple"], ["chris", "black"]]}

如何使此工作,以及如何访问/附加到每个键内的数组?

我一直在尝试这样的方法:

代码语言:javascript
复制
hash["chicago"][].push["new person", "color"]

谢谢,我知道这很琐碎,但是我似乎不能把我的头放在Ruby里面。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-18 20:20:30

把事情分解成几个步骤是有帮助的。因此,我们知道hash是哈希,而hash['chicago']是数组的数组,因此我们可以看到我们想要推入hash['chicago']。这意味着,您的代码唯一的问题是,您有一个额外的大括号。所以我们得到:

代码语言:javascript
复制
hash['chicago'].push ['new person', 'yellow or something']
票数 3
EN

Stack Overflow用户

发布于 2014-04-18 20:20:46

在这些情况下,我通常用默认的proc定义哈希,该进程确定当哈希中没有给定的键时应该发生什么:

代码语言:javascript
复制
hash = Hash.new {|h,k| h[k] = [] }

在这种情况下,默认值是空数组。然后,向哈希中添加新数据非常简单:

代码语言:javascript
复制
hash["chicago"] << ["carl", "blue"]

注意--如果您正在进行查找,缺失的值将被表示为空数组。您可以使用fetch而不是方括号符号来解决这个问题:

代码语言:javascript
复制
hash.fetch("chicago", nil) #=> [["carl", "blue"]]
hash.fetch("new york", nil) #=> nil
票数 1
EN

Stack Overflow用户

发布于 2014-04-18 20:19:57

以下是一种方法:

代码语言:javascript
复制
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#fetchHash#[],这符合您的需要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23161628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档