Arrays 在Ruby中结合数组和条件

Arrays 在Ruby中结合数组和条件,arrays,ruby,Arrays,Ruby,我有一个具有三个属性的类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

我有一个具有三个属性的类
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

如果数组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\u name/last\u name替换为其他变量。

我不确定是否理解您的观点,但这可能是一个可行的选择

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

使用
c
上的块调用,该块是
a
b

中的一个,在您的条件下,您可以将
p1
的名称与
p3
的名称进行比较。那么
p2
p4
呢?您能给出一个更完整的实际数据示例并显示预期的输出吗?@Shaggon您希望结果是一个没有重复名字和姓氏的人员数组吗?是的。我想要一个没有重复的first_name last_name的结果,并且所有项都应该属于数组a。结果应该类似于
[p1]
,因为p2与p3有重复的名字和姓氏,p4在数组b中,所以只有p1是我想要的Hanks stenfan和steenslag。我发现我想要的结果是
(b+a)-(b+a).uniq{e | e.first_name&&e.last_name}
非常感谢。我想我从你的评论中找到了我想要的。它是
(b+a)-(b+a).uniq{e | e.first_name&e.last_name}