2010-08-12 7 views
0

J'ai deux structures similaires à celle ci-dessous. Mais les deux n'ont pas besoin de contenir le tableau intérieur dans le même ordre.Comparaison de hachage de hachage en Ruby

[1 => [{'pc'=>1,'id'=>0},{'pc'=>4,'id'=>0},{'pc'=>2,'id'=>1]] 

Comment comparer dans un tel cas?

+0

Envisagez de convertir les tableaux à des ensembles, puis l'ordre n'a pas d'importance. – jtbandes

+0

Avez-vous besoin de prendre en compte les doublons dans les listes? –

Répondre

1

Si l'ordre n'est pas important, vous devez envisager d'autres structures au lieu de Array là, Set, par exemple.

Vous pouvez utiliser Set pour comparer aussi bien, en convertissant des tableaux à des ensembles avant la comparaison:

require 'set' 
a = [{:a => 2}, {:b => 3}] 
b = [{:b => 3}, {:a => 2}] 

sa = Set.new a 
#=> #<Set: {{:a=>2}, {:b=>3}}> 
sb = Set.new b 
#=> #<Set: {{:b=>3}, {:a=>2}}> 

a == b 
#=> false 
sa == sb 
#=> true 
0

Il semble qu'une simple comparaison des œuvres:

data = { 
    1 => [{'pc'=>1,'id'=>0},{'pc'=>4,'id'=>0},{'pc'=>2,'id'=>1}], 
    2 => [{'pc'=>1,'id'=>0},{'pc'=>4,'id'=>0},{'pc'=>2,'id'=>1}], 
    3 => [{'pc'=>1,'id'=>0},{'pc'=>2,'id'=>1},{'pc'=>4,'id'=>0}] 
} 
data[1] == data[2] 
#> true 
data[2] == data[3] 
#> false 
Questions connexes