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

How to check if a string is equal to any key within a hash and editing another hash based on the result

我正在尝试为角色扮演游戏编写角色创建器,但有两件事我有疑问。

  1. 如何检查字符串是否等于散列中的任何键,在这种情况下,如果 race_choice 等于 races 中的任何键?
  2. 如何在不同的散列中更改另一个键的值以等于 key/value 对,其中包含的键等于我的字符串,在这种情况下,如何使 player[race] 的值等于到 key/value 对,其中 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

我希望玩家 select 从种族列表中选择他们的种族,然后将该种族及其相关信息添加到玩家的角色中。

您可以使用 race_choice 字符串访问 races 然后使用结果:

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

你拿 race_choice,用 to_sym 把它转换成一个符号(因为你的 races 散列是用符号索引的)。如果哈希中存在竞争,则将其分配给 player_race,否则 - 您要么随机化,要么处理错误。