所以我有这个数组:
['One', 'Two', 'One', 'One', 'Three', 'Three', 'One']
我想得到这个结果:
['One', 'Two', 'One', 'Three', 'One']
所以我想删除与上一项相同的项目。 如何在Ruby中做到这一点?
答案 0 :(得分:5)
ary = ['One', 'Two', 'One', 'One', 'Three', 'Three', 'One']
ary.chunk {|x| x }.map(&:first)
#=> ["One", "Two", "One", "Three", "One"]
Enumerable#chunk枚举项目,根据块的返回值将它们组合在一起。返回相同块值的连续元素被组合在一起。
ary.chunk {|x| x }.to_a
=> [["One", ["One"]],
["Two", ["Two"]],
["One", ["One", "One"]],
["Three", ["Three", "Three"]],
["One", ["One"]]]
map(&:first)
Array#map遍历数组,在数组的每个元素上调用first
方法
&:first
被称为symbol to proc
,它创建一个proc对象,map将数组的每个元素都生成
所以上面的例子可以改写如下:
lambda_obj = ->(ele) { ele.first }
ary.chunk {|x| x }.map(&lambda_obj)
#=> ["One", "Two", "One", "Three", "One"]
答案 1 :(得分:2)
使用inject
非常简单:
ary.inject [] do |accum,x|
accum.last == x ? accum : accum << x
end