在Ruby中迭代时移除或更新数组中的对象

yrdbyhpb  于 2023-04-29  发布在  Ruby
关注(0)|答案(1)|浏览(122)

我正在寻找一种有效的方法来迭代对象数组,并根据某些条件更新属性或删除对象或保持原样。例如,假设我有一个Persons数组,每个人都有一个名字和年龄,我想迭代数组并删除40岁以上的人,将“_child”附加到10岁以下的人的名字,并保留其余的人。我可以做到:

persons.delete_if{|p| p.age > 40}
persons.each{|p| p.name = "#{p.name}_child" if p.age < 10}

但有没有一个聪明的方法来合并它们呢?

sr4lhrrt

sr4lhrrt1#

其实有(ruby 2.7+)

persons = persons.filter_map do |p|
  if p.age <= 40
    p.name += "_child" if p.age < 10
    p
  end
end

但我个人会把它们分开

persons = persons
            .reject{|p| p.age > 40}
            .each{|p| p.name += "_child" if p.age < 10 }

相关问题