Объединить массивы с условиями в Ruby - PullRequest
1 голос
/ 07 марта 2019

У меня есть класс People с тремя свойствами

class People
  attr_accessor :first_name, :last_name, :age
end

И у меня есть два массива:

a = [p1, p2]
b = [p3, p4]

Есть ли простой способ объединить эти два массива в новый?массив и удалить элемент с условием, как:

p1.first_name + p1.last_name == p3.first_name + p3.last_name

И после этого весь элемент должен принадлежать массиву a

Например

p1.first_name = "Ada"
p1.last_name = "Wang"
p1.age = 28

p2.first_name = "Leon"
p2.last_name = "S"
p2.age = 28

p3.first_name = "Ada"
p3.last_name = "Wang"
p3.age = 18

p4.first_name = "Mario"
p4.last_name = "M"
p4.age = 80

результат должен быть [p1] 28 лет Ada.Wang

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Я не уверен, что понял вашу точку зрения, но, возможно, это возможный вариант.

c = a + b
c.uniq! { |e| e.first_name && e.last_name }

Вызов Array # uniq! с блоком на c, который является сцепление из a и b.

0 голосов
/ 07 марта 2019

Если сами массивы a и b не содержат людей с совпадающими именами и фамилиями, это будет работать:

b.each_with_index do |p, i|
  if !(b[i].first_name == a[i].first_name and b[i].last_name == a[i].last_name)
    a.push(p) # as people p does not contain the same first/last names as a it can now be added to a
  end
end

Чтобы проверить другие поля, просто замените first_name / last_name другими переменными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...