Вложенные циклы do неожиданно печатаются в Ruby

У меня есть два массива, содержащие строки. Я пытаюсь перебрать оба массива с помощью вложенных циклов .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

Я использую это как вспомогательный метод для определения частичных и частичных данных1

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 вообще не находится в частичном массиве, а [email protected], который находится в partials1 один раз, трижды помещается в duplicatesArray. Если yahoo.com находится в частичном виде три раза, то я бы хотел, чтобы [email protected] (из partials1), например, трижды был перенесен в duplicatesArray.


person Ben W.    schedule 06.07.2017    source источник


Ответы (2)


Чтобы убедиться, что вы можете делать:

  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 - это полный адрес электронной почты)

person m3characters    schedule 06.07.2017

Лучшее решение, которое должно дать вам правильный duplicatesArray, будет:

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