我在学习Ruby时解决了代码问题上的一些问题。我用更多的C ++方式解决了这个one(我还是Ruby的新手)
然后我来检查基于upvotes的最佳解决方案,即:
def unique_in_order(iterable)
(iterable.is_a?(String) ? iterable.chars : iterable).chunk { |x| x }.map(&:first)
end
我不知道(&:first)
是什么。我知道当我跑步时,地图的作用是什么:
[1, 2, 3, 4, 4, 5].chunk {|x| x}.map(&:first)
删除重复的元素。
答案 0 :(得分:3)
根据docs,chunk
枚举项目,根据块的返回值将它们组合在一起:
[1, 2, 3, 4, 4, 5].chunk {|x| x}.to_a
=> [[1, [1]],
[2, [2]],
[3, [3]],
[4, [4, 4]],
[5, [5]]]
然后您只选择每个子阵列的第一个元素:
[1, 2, 3, 4, 4, 5].chunk {|x| x}.map(&:first)
=> [1, 2, 3, 4, 5]
map(&:first)
只是map {|e| e.first}