嵌套每个在Ruby中意外地进行循环打印

时间:2017-07-06 23:41:56

标签: ruby-on-rails arrays ruby nested-loops

我有两个包含字符串的数组。我试图用嵌套的.each do循环迭代这两个数组,以查看第一个数组中的任何元素是否具有第二个数组中任何元素的子字符串。我正在使用.include?在嵌套循环中检查这个。我希望结果是打印的字符串,它与partials中的元素匹配的次数。

这是无效的方法

def orphanCheck(partials, partials1, duplicatesArray)
  partials1.each do |i|
    partials.each do |j|
      if i.include?(j)
        duplicatesArray.push(i)
      end
    end
  end
end

我使用它作为辅助方法来定义partials和partials1

def manipulate(monthEmails, todayEmails, partials, partials1)
  monthEmails.each do |i|
    email = EmailAddress.new(i.to_s)
    partials.push(email.host_name.to_s)
  end
  todayEmails.each do |j|
    todaySignup = j.to_s.slice(11, 100)
    partials1.push(todaySignup)
  end
end 

然后我用以下

打电话给两个人
manipulate(allUnique, todayEmails, partials, partials1)

orphanCheck(partials, partials1, duplicatesArray)
#puts duplicatesArray

duplicatesArray正在打印一些不应该匹配的字符串,并且它打印的字符串比我想要的次数多。例如,gmail.com不是部分,而是me@gmail.com,在partials1中一次,被推送到duplicatesArray三次。如果yahoo.com有三次部分,那么我希望me@yahoo.com(来自partials1)被推送到duplicatesArray三次,例如。

2 个答案:

答案 0 :(得分:0)

确定你可以这样做:

  partials1.each do |i|
    i_ups=i.split('@')[-1]
    partials.each do |j|
      if i_ups===j
        duplicatesArray.push(i)
        break
      end
    end
  end

如果我理解正确(partials只是电子邮件提供商的主机部分,partials1是完整的电子邮件地址)

答案 1 :(得分:0)

一个更好的解决方案,应该给你一个正确的duplicatesArray:

partials1.each do |email_address|
  email_host = email_address.split("@").last
  duplicatesArray.push(email_address) if partials.include?(email_host)
end