#ruby #hash
#ruby #хэширование
Вопрос:
Я пытаюсь выяснить, как напечатать только ключ в хэше прямо сейчас. Я все еще новичок в этом, и мне чего-то не хватает в том, как просто распечатать ключ. Мой код до сих пор:
shopping_list = {
'milk' => false,
'eggs' => false,
'jalapenos' => true
}
puts "Here is your shopping list!"
shopping_list.each do |key|
puts "- #{key}"
end
Мой вывод:
Here is your shopping list!
- ["milk", false]
- ["eggs", false]
- ["jalapenos", true]
Я просто хочу, чтобы значение для печати выглядело как:
Here is your shopping list!
- milk
- eggs
В конце концов, я хотел бы исключить настоящий товар для покупок, в этом случае он уже был бы куплен. Я хотел бы распечатать то, что мне все еще нужно купить в первую очередь.
Ответ №1:
Вы можете получить нужные значения, комбинируя #reject
, #keys
и #each
методы, подобные приведенным ниже:
shopping_list.reject { |key, value| value }.keys.each do |key|
puts "- #{key}"
end
Как упоминал Кэри Свовленд, приведенный выше код создавал временные массивы. Если вы не хотите создавать их, вы можете использовать приведенный ниже код:
shopping_list.each do |key, value|
puts "- #{key}" if value == false
end
Комментарии:
1. @CarySwoveland это можно улучшить,
shopping_list.each { |k,v| puts "- #{k}" unless v }
было бы лучше.
Ответ №2:
Понял это.
shopping_list = {
'milk' => false,
'eggs' => false,
'jalapenos' => true
}
puts "Here is your shopping list!"
for key in shopping_list.keys()
puts "- #{key}"
end
Мой вывод.
Here is your shopping list!
- milk
- eggs
- jalapenos
Комментарии:
1. Это не возвращает результат, указанный вами в вопросе.
2. Я знаю, это был шаг на моем пути к пониманию этого. На самом деле это одна из других вещей, которые мне нужно было сделать в конце.