сравнивая массив хэшей - PullRequest
1 голос
/ 24 марта 2011

У меня есть массив хэшей [{"a" => 1, "b" => 2}, {"a"=> 3, "b" => 4}, {"a" => 5, "b" => 6}]. Теперь мне нужно сравнить все хэши друг с другом, то есть сравнить 1-й хэш со 2-м и 3-м хешем, а 2-й - с 3-м хешем. Если у кого-нибудь есть идеи, пожалуйста, дайте мне знать!

Ответы [ 3 ]

4 голосов
/ 24 марта 2011

Rails имеет класс Hash с diff методом, который возвращает разницу хеша

{"a" => 1, "b" => 2}.diff("a"=> 3, "b" => 4) # { "a" => 1, "b" => 2 }

Посмотрите также на merge метод, он может быть полезен в вашем случае

1 голос
/ 24 марта 2011

Попробуйте это в вашем rails console:

irb(main):001:0> array = [{"a" => 1, "b" => 2}, {"a"=> 3, "b" => 4}, {"a" => 5, "b" => 6}]
irb(main):002:0> 0.upto(array.length-2) do |index|
irb(main):003:1* (index+1).upto(array.length-1) do |index2|
irb(main):004:2* puts "array[#{index}][a]-array[#{index2}][a] is : #{array[index]["a"]-array[index2]["a"]}"
irb(main):005:2> puts "array[#{index}][b]-array[#{index2}][b] is : #{array[index]["b"]-array[index2]["b"]}"
irb(main):006:2> end
irb(main):007:1> end
array[0][a]-array[1][a] is : -2
array[0][b]-array[1][b] is : -2
array[0][a]-array[2][a] is : -4
array[0][b]-array[2][b] is : -4
array[1][a]-array[2][a] is : -2
array[1][b]-array[2][b] is : -2
=> 0

И вот как вы можете их сравнить. Я использовал минус (-) , вы можете использовать AND (&) , тогда для этого вам нужно поставить символ «&» вместо «-», иначе вы может выполнять любые операции, которые вы хотите выполнить на нем ...:)

0 голосов
/ 23 ноября 2012

rails имеет хороший маленький метод hash.diff, который можно легко перенести в Ruby

...