如何删除重复的连续元素,但不删除Ruby数组中的所有重复元素?

时间:2018-05-19 13:43:06

标签: arrays ruby

鉴于数组:

arr = ['a','a','b','b','b','a','c']

Ruby中是否有一种快速删除重复连续元素的方法,但并非像arr.uniq这样的所有重复元素?预期的输出是:

['a','b','a','c']

这是我尝试过的。可以按如下方式迭代数组,但在Ruby中最简单的方法是什么?

def remove_repeats arr
  new_arr       = []
  last_element  = nil
  arr.each do |x|
    if last_element != x
      new_arr << x
    end
    last_element = x
  end
  new_arr
end

arr = ['a','a','b','b','b','a','c','c']
puts remove_repeats(arr).join(',')

# => a,b,a,c

2 个答案:

答案 0 :(得分:4)

试试这个

arr.chunk_while(&:==).map(&:first)

第一步,arr.chunk_while(&:==),生成一个数值相等的数组'。您可以使用arr.chunk_while(&:==).to_a查看第一步的结果。第二步,map(&:first),获取每个子数组的第一项,最后它展平这个n子阵列。

答案 1 :(得分:0)

尝试arr.uniq!,它会删除所有重复项。