Ruby 如何检查字符串是否等于散列中的任何键,并根据结果编辑另一个散列

Ruby 如何检查字符串是否等于散列中的任何键,并根据结果编辑另一个散列,ruby,string,ruby-hash,Ruby,String,Ruby Hash,我正试图为RPG编写一个角色创建者,但有两件事我有疑问 如何检查字符串是否等于散列中的任何键,在本例中,race_choice是否等于races中的任何键? 如何在不同的散列中更改另一个键的值,使其等于包含与我的字符串相等的键/值对,在这种情况下,如何使player[race]的值等于race_choice等于其键的键/值对? 下面是我代码的简化部分: player = { race: {} } races = { human: {key1: "value", key2: "value"}

我正试图为RPG编写一个角色创建者,但有两件事我有疑问

如何检查字符串是否等于散列中的任何键,在本例中,race_choice是否等于races中的任何键? 如何在不同的散列中更改另一个键的值,使其等于包含与我的字符串相等的键/值对,在这种情况下,如何使player[race]的值等于race_choice等于其键的键/值对? 下面是我代码的简化部分:

player = {
  race: {}
}

races = {
human: {key1: "value", key2: "value"},
elf: {key1: "value", key2: "value"},
dwarf: {key1: "value", key2: "value"}
}

loop do
  puts "What's your race?"
  race_choice = gets.chomp.downcase
  if race_choice == races[:race].to_s              #I know this code doesn't work, but hopefully it
    player[:race].store(races[:race, info])        #gives you a better idea of what I want to do.
    puts "Your race is #{player[:race[:race]]}."
    break
  elsif race_choice.include?('random')
    puts "Random race generation goes here!"
    break
  else
    puts "Race not recognized!"
  end
end
我希望玩家从种族列表中选择他们的种族,然后将该种族及其相关信息添加到玩家的角色中

您可以使用race_选项字符串访问比赛,然后使用结果:

race = races[race_choice.to_sym]
if race
  player[:race] = race
elsif race_choice.include?('random')
  #...
else
 #...
end

您使用race_选项,将其转换为带有to_sym的符号,因为您的races散列是用符号索引的。如果散列中存在比赛,则将其分配给玩家比赛,如果不存在,则将随机分配或处理错误。

非常感谢。这比我想做的要简单得多。另一个问题:如何仅打印玩家[:race]的密钥?我想这样插入它:您的种族是{player[:race]}。您需要单独存储它-要么作为一个单独的变量,要么作为player散列中的一个单独的键,例如player[:race_name],或者在种族数据human:{key1:value,key2:value,name:'human'}中,我建议删除这两个问题中的一个。它们之间没有密切的联系,因此产生了一个广泛的问题。请参阅和链接的页面和。明白。谢谢你的编辑和建议。将来我会努力改进我的帖子。