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

时间:2014-10-11 18:06:13

标签: ruby arrays

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

我有以下Array

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

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

所以这就是我写的方法:

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

所以现在当我打电话给entries.clean_up时,我得到以下结果:

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

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

1 个答案:

答案 0 :(得分:1)

默认情况下,

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

self.flat_map(&:split).uniq

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

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

或类似。