在Ruby中结合条件数组

时间:2019-03-07 13:43:23

标签: 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 = "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 个答案:

答案 0 :(得分:1)

我不确定我是否明白你的意思,但这也许是一个可能的选择。

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

ca的{​​{3}}上的一个块中调用Array#uniq!

答案 1 :(得分:0)

如果数组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替换为其他变量即可。