В своих исследованиях алгоритмов и структур данных я стараюсь делать в Ruby то, что я изучаю, используя Javascript. Оба языка имеют свой собственный способ подъема переменных и работы с правдой / ложью.
Этот алгоритм прекрасно работает в JS, но в Ruby я получаю классический undefined method
+ 'для nil: NilClass` при запуске троичного файла о существовании хэша.
Я пытался заранее сделать некоторые условия, чтобы убедиться, что ничего не пройдет, если объект не существует.
Вот решение Javascript:
function validAnagram(str1, str2){
if (str1.length !== str2.length) {
return false;
}
const strOneObj = {};
const strTwoObj = {};
for (let char of str1) {
strOneObj[char] = strOneObj[char] + 1 || 1;
}
for (let char of str2) {
strTwoObj[char] = strTwoObj[char] + 1 || 1;
}
for (let values in strOneObj) {
if (strOneObj[values] !== strTwoObj[values]) {
return false;
}
return true;
}
}
validAnagram('cinema', 'ice')
Вот версия для Ruby:
def valid_anagram(str1, str2)
if str1.length != str2.length
false
else
str_one_hash = {}
str_two_hash = {}
str1.split('').each do |char|
if str_one_hash == nil
str_one_hash[char] = 0
else
str_one_hash[char] += 1
end
(str_one_hash.keys & str_one_hash.keys).each do |char, count|
if str_one_hash[char] != str_one_hash[char]
false
end
end
end
true
end
valid_anagram("cinema", "iceman")
Вкратце: как мне заставить это работать в прекрасном Ruby?