Как проверить, равна ли строка какому-либо ключу в хэше, и отредактировать другой хеш на основе результата - PullRequest
1 голос
/ 10 ноября 2019

Я пытаюсь написать создателя персонажа для РПГ, но у меня есть два вопроса, по которым у меня есть вопросы.

  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

Я хочу, чтобы игрок выбрал свою расу из списка рас, а затем добавил эту расу и связанную с ней информацию к персонажу игрока.

1 Ответ

1 голос
/ 10 ноября 2019

Вы можете использовать строку 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, если нет - вы либо рандомизируете, либо обрабатываете ошибку.

...