2009-09-06 124 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]