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}(この場合はDave)に基づいて、#{value}の値だけを出力するようにしようとしています。したがって、上記の例では、コンソールに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
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 に答える
2
@hash.has_key?(officer.name) ? @hash[officer.name] : "no match"
于 2012-10-03T14:44:39.633 に答える
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 に答える