javascript - 如何让这个 Javascript 字谜算法在 Ruby 中工作?

标签 javascript ruby anagram

在我对算法和数据结构的所有研究中,我试图在 Ruby 中实现我使用 Javascript 学到的东西。两种语言都有自己的提升变量和处理真/假的方式。

这个算法在 JS 中运行良好,但在 Ruby 中,当在哈希的存在上运行三元时,我得到了经典的 undefined method+' for 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 中实现此功能?

最佳答案

用 Ruby 实现此目的的方法

def valid_anagram(str1, str2)
  if str1.length != str2.length 
    false 
  else 
    str_one_hash = str1.split('').map{|char| [char, str1.count(char)]}.to_h
    str_two_hash = str2.split('').map{|char| [char, str2.count(char)]}.to_h
    str_one_hash == str_two_hash
  end   
end

关于javascript - 如何让这个 Javascript 字谜算法在 Ruby 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56693675/

相关文章:

javascript - ng-model 的 Angular Directive(指令)不绑定(bind)

javascript - 在以下情况下是否必须声明索引签名?

ruby - 在ruby中将字符串撤消为二进制

ruby-on-rails - 如何让所有 Android 设备制造商在 Ruby 中使用 WURFL?

正则表达式 - 查找字谜和子字谜

arrays - 这段代码是做什么的。检查两个字符串的字谜

python - 检查需要删除多少个字符才能在 Python 中生成字谜

javascript - 如何划分 RGB 值以获得正确的时间颜色?

javascript - 如何连接 Material 表中的两个或多个字段 react

mysql - Rails 在 db 的所有列中搜索值而不显式命名它们