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#assocArray#rassoc 方法,为数组数组添加“类似哈希的查找”:

arr = [
  ['London', 'England'],
  ['Moscow', 'Russia'],
  ['Seattle', 'USA']
]

arr.assoc('Seattle') #=> '['Seattle', 'USA']
arr.rassoc('Russia') #=> ['Moscow', 'Russia']

请记住,与查找时间为常数 O(1) 的 Ruby 哈希不同,assocrassoc 都具有线性时间 O(n)。您可以查看Ruby source code on Github for each method.

因此,尽管在 theory 中您可以使用数组数组在 Ruby 中“像散列一样”,但如果您是 给定一个数组数组——也许通过一些你无法控制的外部API——否则在几乎所有其他情况下,使用哈希将是更好的方法。

【讨论】:

以上是关于Ruby 中的关联数组的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails - 使用符号数组获取对象关联值

ruby on rails (模型关联查询)

PHP 数组中的每个ID键关联一个值,可不可以关联两个值?

排序与其他相关联的多维数组中的数组

与字符串数组关联的数组中的最小数字

关联数组VS索引数组