使用多个值ruby访问哈希

时间:2016-07-29 15:03:57

标签: ruby

我有一个哈希

h = Hash.new{|hsh,key| hsh[key] = [] }

它的值存储为数组

Iv添加到键的值数组中,如下所示:

h[@name] << @age
h[@name] << @grade

我试图访问这样的年龄

puts h[:@name][0]

但它不起作用?

有更好的方法吗?

我想要做的是create是一个散列,其中有一个有大量值的键: 例如key=>name和值等于ageaddressgender

2 个答案:

答案 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