У меня есть письменный экзамен здесь, вот инструкция.Рубиновый ключ с использованием Split и Join
Напишите программу, которая печатает группы слов, которые являются анаграммами. Анаграммы - это слова, которые имеют одинаковые точные буквы в них, но в разных порядков. Ваш результат должен выглядеть примерно так:
["demo", "dome", "mode"]
["neon", "none"]
(и т.д.)
А вот решение для этого:
words = ['demo', 'none', 'tied', 'evil', 'dome', 'mode', 'live',
'fowl', 'veil', 'wolf', 'diet', 'vile', 'edit', 'tide',
'flow', 'neon']
result = {}
words.each do |word|
key = word.split('').sort.join
if result.has_key?(key)
result[key].push(word)
else
result[key] = [word]
end
end
result.each do |k, v|
puts "------"
p v
end
Я пытался понять решение рубин кода, но не может легко понять его. Один из моих вопросов заключается в том, как вы можете проверить хэш-код result
, если у него нет ключа или какого-либо элемента из него. Другое дело, как это сделать. join
и. sort
работает над этим кодом.
Я действительно смущаюсь, как все проходит через ответ. Может ли кто-нибудь там объяснить на этих кодах по строкам в непрофессионале, новичок, который является манекеном, как я, может понять?
Добавление к хорошему объяснению с помощью @GaganGami: Даже если вы не использовали 'has_key?', Выражение 'result [key]' действительно, если ключ не существует. По умолчанию он просто возвращает 'nil' для отсутствующего ключа. Однако при создании хеша можно запросить другое значение по умолчанию. – user1934428
Если вы нашли какой-либо из ответов, пожалуйста, выберите тот, который вам больше всего понравился. –