0

我正在尝试查看哈希并将其值与现有字符串进行比较,然后当找到匹配项时,我想输出它的键。我试图将其写入代码块并将结果输出到控制台。

officer.name = "Dave"

@hash = { "Tom" => "97", "Dave" => "98", "John" => "99" }

@hash.each { |key, value| do
    if #{key} == officer.name
        puts "id: #{value}"
    else
        puts "no match"
    end
}

现在我的控制台输出:

 id: 97
 no match
 id: 98
 no match
 id: 99
 no match

我试图让它根据匹配的#{key} 仅输出#{value} 的值,在这种情况下是Dave。所以对于上面的例子,我希望我的控制台只吐出数字 98 或“不匹配”。

4

6 回答 6

6

这是一个哈希!你可以更有效地做你尝试的事情:

officer.name = "Dave"

@hash = { "Tom" => "97", "Dave" => "98", "John" => "99" }

unless @hash.key?(officer.name) 
  puts "no match"
else 
  puts "id: #{@hash[officer.name]}"
end
于 2012-10-03T14:19:46.567 回答
3

是不是因为你忘记了“?

if "#{key}" == officer.name

但你可以这样做

if key == officer.name
于 2012-10-03T14:17:36.890 回答
2
@hash.has_key?(officer.name) ? @hash[officer.name] : "no match"
于 2012-10-03T14:44:39.633 回答
2
officer.name = "Dave"

@hash = { "Tom" => "97", "Dave" => "98", "John" => "99" }

@hash.each do |key, value|
  if key == officer.name
    puts key
  else
    puts "no match"
  end
end

这应该工作

于 2012-10-03T14:18:13.993 回答
1

通过键进行哈希查找时,请避免使用#[]。改用#fetch:

officer.name = "Dave"
@hash = { "Tom" => "97", "Dave" => "98", "John" => "99" }
puts @hash.fetch(officer.name, 'no match')

#fetch 允许您指定除 nil 以外的默认值,这将防止来自哈希查找的意外 nil 抛出非常常见的 NoMethodError。

于 2012-10-03T14:52:32.573 回答
1

这也有效。对原帖稍作修改。它会打印出每一对的答案,但并不能确定答案所指的是哪对。

officer = "Dave"

@hash = { "Tom" => "97", "Dave" => "98", "John" => "99" }

@hash.each do |key, value|
    if key == officer
    puts key
  else
    puts "no match"
  end
end
于 2013-01-23T23:07:07.433 回答