Ruby有关联数组吗?
例如:
a = Array.new
a["Peter"] = 32
a["Quagmire"] = 'asdas'
在 Ruby 中创建这样的数据结构最简单的方法是什么?
Ruby有关联数组吗?
例如:
a = Array.new
a["Peter"] = 32
a["Quagmire"] = 'asdas'
在 Ruby 中创建这样的数据结构最简单的方法是什么?
与 PHP 不同,Ruby(以及几乎所有其他语言)将数组和哈希表视为两种不同的东西。
http://ruby-doc.org/core/classes/Hash.html
在你的情况下,应该使用:
a = {'Peter' => 32, 'Quagmire' => 'asdas'}
有几本免费的入门级 Ruby 书籍和在线模拟器等资源可供使用。
a = Array.new
" 替换为 "a = Hash.new
"。 - Arsen7使用哈希,以下是一些如何入门的示例(所有这些示例都执行相同的操作,只是语法不同):
a = Hash.new
a["Peter"] = 32
a["Quagmire"] = 'asdas'
或者您可以这样做:
a = {}
a["Peter"] = 32
a["Quagmire"] = 'asdas'
甚至只需要一句话:
a = {"Peter" => 32, "Quagmire" => 'gigity'}
a["Peter"] += 1
等。 - Scott C Wilson为了完整起见,有趣的是注意到 Ruby 确实 提供了 Array#assoc
和 Array#rassoc
方法,它们为一个数组中的数组添加了"类似哈希表的查找"功能:
arr = [
['London', 'England'],
['Moscow', 'Russia'],
['Seattle', 'USA']
]
arr.assoc('Seattle') #=> '['Seattle', 'USA']
arr.rassoc('Russia') #=> ['Moscow', 'Russia']
请记住,与Ruby哈希表查询时间为常数O(1)
不同,assoc
和rassoc
的查询时间是线性时间O(n)
。你可以通过查看每个方法在Github上的Ruby源代码来了解其中原因。
因此,尽管在理论上你可以使用一个数组的数组来实现Ruby中的“哈希”,但如果你没有任何控制权,可能只有在以某些外部API接收到一个数组的数组时,才会想要使用assoc/rassoc
方法,在几乎所有其他情况下,使用哈希表将是更好的选择。