删除Ruby数组中相邻的相同元素?

Mik*_*use 10 ruby arrays

Ruby 1.8.6

我有一个包含数值的数组.我想减少它,使得相同值的序列减少到该值的单个实例.

所以我想要

a = [1, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3]
Run Code Online (Sandbox Code Playgroud)

减少到

[1, 2, 3, 2, 3]
Run Code Online (Sandbox Code Playgroud)

如您所见,Array#uniq在这种情况下不起作用.

我有以下,有效:

(a.size - 1).downto(1) { |i| a[i] = nil if a[i - 1] == a[i] }
Run Code Online (Sandbox Code Playgroud)

任何人都可以想出一些不那么难看的东西吗?

Mar*_*une 21

对于最简单,最精简的解决方案,您可以使用以下方法Enumerable#chunk:

a.chunk(&:itself).map(&:first)
Run Code Online (Sandbox Code Playgroud)

itself方法是红宝石2.2+.使用{|n| n},如果你被困在一个旧的Ruby,还是我的backports宝石.它是在Ruby 1.9.2中引入的.如果你不幸使用旧的红宝石,你可以使用我的backports gem和require 'backports/1.9.2/enumerable/chunk'.


Mla*_*vić 5

a.inject([]){|acc,i| acc.last == i ? acc : acc << i }
Run Code Online (Sandbox Code Playgroud)