正常uniq
:
[1, 2, 3, 1, 1, 4].uniq => [1, 2, 3, 4]
我想用替换件替换副本。
是否有方法或方法来实现这样的目标?
[1, 2, 3, 1, 1, 4].uniq_with_replacement(-1) => [1, 2, 3, -1, -1, 4]
提前致谢!
答案 0 :(得分:4)
这是一个单行:
a.fill{ |i| a.index(a[i]) == i ? a[i] : -1 }
答案 1 :(得分:3)
这样的东西?:
class Array
def uniq_with_replacement(v)
map.with_object([]){|value, obj| obj << (obj.include?(value) ? v : value) }
end
end
现在:
[1, 2, 3, 1, 1, 4].uniq_with_replacement(-1)
# => [1, 2, 3, -1, -1, 4]
[1, 2, 3, 1, 1, 2, 4].uniq_with_replacement(-1)
# => [1, 2, 3, -1, -1, -1, 4]
答案 2 :(得分:1)
另外1个:
arr = [1, 2, 3, 1, 1, 4]
value = -1
a = arr.each_with_index.to_a
#=> [[1, 0], [2, 1], [3, 2], [1, 3], [1, 4], [4, 5]]
b = (a - a.uniq(&:first)).map(&:last)
#=> [3, 4]
arr.map.with_index { |e,i| b.include?(i) ? value : e }
#=> [1, 2, 3, -1, -1, 4]