Ruby 向数组添加新对象时如何按position值删除同属性旧元素
原代码问题原因
Ruby的uniq方法默认保留第一个出现的重复元素,你先将新元素追加到数组末尾,去重时就会保留靠前的同position旧元素,删除靠后的新元素,因此不符合需求。
简洁实现方案
方案1(推荐,易读性最高)
先过滤掉原有数组中与新用户position一致的元素,再追加新用户即可:
# new_user为待添加的新用户对象 users = users.reject { |user| user[:position] == new_user[:position] } << new_user # 若数组元素是对象而非哈希,将user[:position]替换为user.position即可
方案2(基于uniq实现,调整元素顺序即可)
把新元素放在数组最前面,去重时就会优先保留新元素:
users = [new_user, *users].uniq { |user| user[:position] }
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

