ruby uniq与替换

时间:2014-10-31 11:25:25

标签: ruby uniq

正常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]

提前致谢!

3 个答案:

答案 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]