【问题标题】:How to check if a string is equal to any key within a hash and editing another hash based on the result如何检查字符串是否等于哈希中的任何键并根据结果编辑另一个哈希
【发布时间】:2019-11-09 21:54:31
【问题描述】:

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

  1. 如何检查字符串是否等于散列中的任何键,在这种情况下,race_choice 是否等于 races 中的任何键?
  2. 如何将不同哈希中的另一个键的值更改为等于包含等于我的字符串的键的键/值对,在这种情况下,如何使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

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

【问题讨论】:

  • 我建议删除这两个问题之一。它们没有密切相关,导致一个广泛的问题。请参阅“How to Ask”以及链接页面和“mcve”。
  • 明白。感谢您的编辑和建议。以后会努力改进我的帖子。

标签: ruby string ruby-hash


【解决方案1】:

您可以使用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,否则 - 您要么随机化,要么处理错误。

【讨论】:

  • 非常感谢。这比我尝试做的要简单得多。另一个问题:如何只打印player[:race] 的密钥?我想像这样插入它:"Your race is #{player[:race]}."
  • 您需要单独存储它 - 作为单独的变量,或者作为 player 哈希(例如 player[:race_name])或比赛数据中的单独键 human: {key1: "value", key2: "value", name: 'human'},
猜你喜欢
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 2011-11-26
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
相关资源
最近更新 更多