2009-09-06 96 views
5

删除重复是否有红宝石的好方法,以消除在枚举列表复制(即拒绝等)红宝石枚举列表

+0

你可以指定你想记住哪种列表(1)*不是*数组,但(2)可能有重复?范围不能有重复。 – Telemachus 2009-09-06 19:17:26

+0

“enumerable lists”非常不清楚。它是一个Enumerator类的实例变量吗? – peterpengnz 2012-12-03 21:12:36

回答

10

对于数组,你可以使用的uniq()方法

a = [ "a", "a", "b", "b", "c" ] 
a.uniq #=> ["a", "b", "c"] 

所以,如果你只是

(1..10).to_a.uniq 

%w{ant bat cat ant}.to_a.uniq 

因为反正几乎每个实现方法具你做的实现将作为一个Array类返回。

+1

请注意,'(1..10).to_a.uniq'永远不会是任何东西,而是浪费打字,因为根据定义,范围不能有重复的元素。 (或者有什么我很困惑的?) – Telemachus 2009-09-06 19:13:34

+0

你是对的,它永远不会重复。只是给一个想法。我添加了另一个样本,谢谢。 – Jirapong 2009-09-07 00:27:08

+2

从技术角度来说,一个范围(Fixnums以外的其他范围)可以产生重复的元素 - 它只需要一个对象x,x.succ == x。例如,表示斐波纳契数字的类将具有数字1的这个属性。我不确定为什么你会那样做 - 很可能这是一个疯狂的迹象 - 但它是*可能*。 – Chuck 2009-09-07 00:43:30

2

嘛策略是将它们转换为数组或从数组删除重复。顺便说一句,列表是ruby中的数组,所以我不确定你的意思是“可枚举列表”。

+1

我也被“enumerable list”弄糊涂了。如果它是一个数组,那么它非常简单。如果它是Enumerator类,那么它需要更多的思考。 – peterpengnz 2012-12-03 21:10:42

1

我喜欢使用集合逻辑运算符,如果对象没有.uniq方法。

a = [2,3,3,5,5,5,6] # => [2, 3, 3, 5, 5, 5, 6] 
a | a # => [2, 3, 5, 6]