2014-04-12 238 views
-1

嘗試創建一組名稱的每個排列並將它們作爲成對放入多維數組中,然後刪除任何重複項。我遇到的問題是遍歷數組,比較兩個值並刪除該數組(如果它們相同)。ruby​​從多維數組中刪除重複項

names = ["Bob", "Dave", "Clive"] 
names2 = names.repeated_combination(2).to_a 
[["Bob", "Bob"], ["Bob", "Dave"], ["Bob", "Clive"], ["Dave", "Dave"], ["Dave", "Clive"],  ["Clive", "Clive"]] 

這將返回一組獨特的多維數組

names2.each { |x| x.delete_if { |y| y.slice(0) == y.slice(1) }} 

,但它返回相同的陣列與重複之前。 我試着在幾個地方追加'uniq',但這沒什麼區別。

+0

只提預期輸出...你是否想刪除'[「Bob」,「Bob」]'作爲重複項? –

+2

爲什麼不試試'names.combination(2).to_a'? –

回答

0

我會做:

names = ["Bob", "Dave", "Clive"] 
names.combination(2).to_a 
# => [["Bob", "Dave"], ["Bob", "Clive"], ["Dave", "Clive"]] 

和糾正你的代碼: -

non_uniq_comb = names.repeated_combination(2).reject { |a,b| a == b } 
# => [["Bob", "Dave"], ["Bob", "Clive"], ["Dave", "Clive"]] 
+0

是的,謝謝,刪除了額外的行來重複排序的需要! –

0

如果你想使用相同的名稱中刪除陣列:

(names2.map { |n| n if n[0] != n[1]}).compact 
+0

這是刪除重複,乾杯隊友現場。 –