Devo verificare se due array contengono gli stessi dati in qualsiasi ordine. Utilizzando il metodo immaginario compare
, vorrei fare:Confronto di due array in Ruby
arr1 = [1,2,3,5,4]
arr2 = [3,4,2,1,5]
arr3 = [3,4,2,1,5,5]
arr1.compare(arr2) #true
arr1.compare(arr3) #false
ho usato arr1.sort == arr2.sort
, che sembra funzionare, ma c'è un modo migliore di fare questo?
Grazie. Questa è l'unica soluzione che restituisce true solo per i primi 'arr1' e' arr2', quando confronti ciascuno di questi array: 'arr1 = [1,2,3,5,4]; arr2 = [3,4,2,1,5]; arr3 = [3,4,2,1,5,5]; arr4 = [1,2,3,5,4,4] '- Non sono sicuro se sarei sempre preso la briga di installare la gemma delle faccette, ma se lo sto usando comunque per qualcosa, questo sembra un metodo molto migliore. – SimonMayer
Oltre a n log n 'sort' non funziona bene con tipi diversi, ad es. se ci sono 'nil's. La frequenza dovrebbe funzionare bene, buona idea. –
Un'implementazione semplice di "frequenza" è con inject: class Array; frequenza di def; self.inject (Hash.new (0)) {| p, v | p [v] + = 1; p} fine; fine –