【问题标题】:Nested each do loops printing unexpectedly in Ruby嵌套每个do循环在Ruby中意外打印
【发布时间】:2017-07-06 23:41:56
【问题描述】:

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

这是行不通的方法

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 根本不在 partials 中,但 me@gmail.com,在 partials1 中一次,被推送到 duplicatesArray 三次。如果 yahoo.com 在 partials 中三次,那么我希望 me@yahoo.com(来自 partials1)被推送到 duplicatesArray 三次,例如。

【问题讨论】:

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


    【解决方案1】:

    为了确保您可以这样做:

      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 是完整的电子邮件地址)

    【讨论】:

      【解决方案2】:

      应该为您提供正确的 duplicatesArray 的更好解决方案是:

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

      【讨论】:

        猜你喜欢
        • 2018-07-15
        • 2023-04-06
        • 1970-01-01
        • 2021-12-05
        • 2013-05-11
        • 1970-01-01
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多