我有一个哈希
h = Hash.new{|hsh,key| hsh[key] = [] }
它的值存储为数组
Iv添加到键的值数组中,如下所示:
h[@name] << @age
h[@name] << @grade
我试图访问这样的年龄
puts h[:@name][0]
但它不起作用?
有更好的方法吗?
我想要做的是create是一个散列,其中有一个有大量值的键:
例如key=>name
和值等于age
,address
,gender
等
答案 0 :(得分:5)
恕我直言,你的想法还可以。
唯一的错误是..你如何访问哈希。无需在:
签名之前添加额外的冒号@
。
删除冒号,它应该按预期工作:
puts h[@name][0]
答案 1 :(得分:1)
哈希是一组键值对,如下所示:“employee”=&gt; “薪水”。它类似于一个数组,除了索引是通过任何对象类型的任意键完成的,而不是整数索引。
通过键或值遍历散列的顺序可能看起来是任意的,通常不在插入顺序中。如果您尝试使用不存在的密钥访问哈希,则该方法将返回nil。
哈希用于存储大量(或小量)数据并有效地访问它。例如,假设您将此作为哈希:
prices = {
'orange' => 3.15,
'apple' => 2.25,
'pear' => 3.50
}
现在您要调用关键字apple
并从某些用户输入中获取这些项目的价格:
print 'Enter an item to verify price: '
item = gets.chomp
puts "The price of an #{item}: #{prices[item]}"
# <= The price of an apple: 2.25
这是一个基本哈希,现在让我们使用Array
作为密钥进入你正在做的事情。
prices = {
'apple' => ['Granny Smith', 'Red'],
'orange' => ['Good', 'Not good'],
'pear' => ['Big', 'Small']
}
print 'Enter an item for a list: '
item = gets.chomp
puts "We have the following #{item}'s available: #{prices[item]}"
# <= We have the following apple's available: ["Granny Smith", "Red"]
现在,如果我们想抓住其中一种类型:
puts prices[item][0]
# <= Granny Smith
puts prices[item][1]
#<= Red
现在让我们进入更高级的技术,就像你上面所做的那样,你的想法很棒,但是你需要做的就是将信息附加到hash
,当你打电话给{{1}时不要试图将其称为符号:
@name
好吧我们做了什么?
h = Hash.new{|hsh,key| hsh[key] = [] }
h[@name] = []
#<= []
h[@name] << ['apple', 'pear']
#<= [["apple", "pear"]]
h[@name] << ['orange', 'apple']
#<= [["apple", "pear"], ["orange", "apple"]]
h[@name].flatten[0]
#<= "apple"
h[@name].flatten[1]
#<= "pear"
h[@name].flatten[1, 2]
#<= ["pear", "orange"]
创建了h = Hash.new{|hsh,key| hsh[key] = [] }
,其值为空hash
。
array
将h[@name] = []
初始化为空@name
array
将包含h[@name] << ['apple', 'pear']
的数组附加到apple, pear
键。
@name
将包含h[@name] << ['orange', 'apple']
的第二个array
附加到数组中,因此,当我们立即调用orange, apple
时,它将输出附加到其中的第一个h[@name][1]
。
array
将h[@name].flatten[0]
展平为一个数组并调用array
的第一个元素。
当您调用密钥(array
)时,不要将其称为符号,因为它已包含在变量中。因此,您所要做的就是调用该变量,并成功输出该键的值。希望这澄清了一些事情,有关@name
的更多信息,请查看此问题:http://www.tutorialspoint.com/ruby/ruby_hashes.htm