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'
.