在研究万物算法和数据结构时,我试图在Ruby中做我使用Javascript学习的内容。两种语言都有自己的方式来悬挂变量和处理真假。

这种算法在JS中工作正常,但在Ruby中,当在存在哈希的情况下运行三元时,我得到nil:NilClass`的经典undefined method +'。

我尝试事先进行一些条件检查,以确保如果对象不存在,则不会通过任何检查。

这是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中使用它?

最佳答案

你好亲近

罪魁祸首是if str_one_hash == nil

if str_one_hash[char] == nil是您要寻找的。

注意:您可以通过调用str_one_hash = Hash.new { 0 }将哈希的默认值设置为0,这消除了nil检查。

10-06 05:30
查看更多