如何更优雅地删除Ruby Array的所有元素中的重复项?

我想删除Array对象中的重复项。 最好用一个例子来解释。

我有以下Array

 entries = ["abc", "ab", "c", "cd"] 

我想要一个方法,通过从Array元素中删除重复项来清除它,并返回一个Array ,每个唯一项都有一个元素。

所以这是我写的方法来做到这一点:

 class Array def clean_up() self.join(" ").split(" ").uniq end end 

所以现在当我调用entries.clean_up我得到以下结果:

 ["a", "b", "c", "d"] 

这正是我想要的结果,但是在Ruby中有更优雅的方法吗?

默认情况下拆分空格上的拆分(当然,假设您没有像改变$;那样做一些疯狂的事情)。 您希望拆分每个字符串并将结果展平为一个列表,只要您想要“对每个元素执行X并展平”您想要使用flat_map 。 将这些放在一起产生:

 self.flat_map(&:split).uniq 

如果您只想分隔空格或不想依赖理智,那么您可以:

 self.flat_map { |s| s.split(' ') }.uniq 

或类似的。