Ruby 中的关联数组
Posted
技术标签:
【中文标题】Ruby 中的关联数组【英文标题】:Associative Arrays in Ruby 【发布时间】:2011-05-15 01:55:52 【问题描述】:Ruby 有关联数组吗?
例如:
a = Array.new
a["Peter"] = 32
a["Quagmire"] = 'asdas'
在 Ruby 中创建这种数据结构最简单的方法是什么?
【问题讨论】:
它的 Ruby 语言,Ruby on rails 是一个用 Ruby 构建的框架。 【参考方案1】:与混合数组和哈希的 php 不同,在 Ruby(以及几乎所有其他语言)中,它们是独立的。
http://ruby-doc.org/core/classes/Hash.html
在你的情况下是:
a = 'Peter' => 32, 'Quagmire' => 'asdas'
有几本关于 ruby 和在线模拟器等的免费入门书籍。
http://www.ruby-doc.org/
【讨论】:
换句话说:您只需将“a = Array.new
”替换为“a = Hash.new
”即可。
值得注意的是,ruby 似乎将散列与使用散列进行查找的数据结构混淆了——例如哈希表/哈希映射。在大多数其他情况下,这些概念不会混淆
RE:“...[关联] 数组和哈希...在 Ruby(以及几乎所有其他语言)中,它们是独立的。” Wikipedia 在这方面列出了十几个其他“像 PHP”(参见:“Associative Array”)——没有争论,但感觉这条评论分散了答案的注意力。【参考方案2】:
使用哈希,这里有一些关于如何开始的例子(所有这些都做同样的事情,只是语法不同):
a = Hash.new
a["Peter"] = 32
a["Quagmire"] = 'asdas'
或者你可以这样做:
a =
a["Peter"] = 32
a["Quagmire"] = 'asdas'
甚至是一个班轮:
a = "Peter" => 32, "Quagmire" => 'gigity'
【讨论】:
你也可以按预期递增;a["Peter"] += 1
等【参考方案3】:
为了完整起见,有趣的是,Ruby确实提供了 Array#assoc
和 Array#rassoc
方法,为数组数组添加“类似哈希的查找”:
arr = [
['London', 'England'],
['Moscow', 'Russia'],
['Seattle', 'USA']
]
arr.assoc('Seattle') #=> '['Seattle', 'USA']
arr.rassoc('Russia') #=> ['Moscow', 'Russia']
请记住,与查找时间为常数 O(1)
的 Ruby 哈希不同,assoc
和 rassoc
都具有线性时间 O(n)
。您可以查看Ruby source code on Github for each method.
因此,尽管在 theory 中您可以使用数组数组在 Ruby 中“像散列一样”,但如果您是 给定一个数组数组——也许通过一些你无法控制的外部API——否则在几乎所有其他情况下,使用哈希将是更好的方法。
【讨论】:
以上是关于Ruby 中的关联数组的主要内容,如果未能解决你的问题,请参考以下文章