2016-12-09 2 views
2

у меня есть массив хэш и в каждом из этих хэш у меня есть вложенная структура, как так:ли Рубин уник работает на массиве хэш с вложенными элементами

{ 
     "id" : "RZ60586_5836f1ed468e5d0004000015", 
     "status" : "live", 
     "phases" : [ 
      { 
       "phase" : "main_phase", 
       "elements" : [ 
        { 
         "banner_id" : "5836f1ed468e5d0004000015_widesky_light", 
         "split_var" : "light", 
         "reports" : [ ] 
        }, 
        { 
         "banner_id" : "5836f1ed468e5d0004000015_widesky_light", 
         "split_var" : "light", 
         "reports" : [ ] 
        }, 
        { 
         "banner_id" : "5836f1ed468e5d0004000015_widesky_light", 
         "split_var" : "light", 
         "reports" : [ ] 
        }, 
        { 
         "banner_id" : "5836f1ed468e5d0004000015_widesky_light", 
         "split_var" : "light", 
         "reports" : [ ] 
        }, 
        { 
         "banner_id" : "5836f1ed468e5d0004000015_widesky_light", 
         "split_var" : "light", 
         "reports" : [ ] 
        }, 
        { 
         "banner_id" : "5836f1ed468e5d0004000015_widesky_light", 
         "split_var" : "dark", 
         "reports" : [ ] 
        }, 
        { 
         "banner_id" : "5836f1ed468e5d0004000015_widesky_light", 
         "split_var" : "dark", 
         "reports" : [ ] 
        }, 
        { 
         "banner_id" : "5836f1ed468e5d0004000015_widesky_light", 
         "split_var" : "dark", 
         "reports" : [ ] 
        }, 
        { 
         "banner_id" : "5836f1ed468e5d0004000015_widesky_light", 
         "split_var" : "dark", 
         "reports" : [ ] 
        }, 
        { 
         "banner_id" : "5836f1ed468e5d0004000015_widesky_light", 
         "split_var" : "dark", 
         "reports" : [ ] 
        } 
       ] 
      } 
     ] 
    } 

Это является примером хэша, который будет внутри массива. Если я использую uniq на этом массиве (изменение в нем будет происходить только внутри reports массива):

{ 
         "banner_id" : "5836f1ed468e5d0004000015_widesky_light", 
         "split_var" : "dark", 
         "reports" : [ ] 
        } 

Итак, вопрос в том, насколько уверенно я могу быть, что я не буду терять данные при использовании uniq ?

ответ

3

Массивы и хеши при проверке на равенство (которые uniq) сравниваются по элементам.

Два массива считаются равными, если их соответствующие элементы равны. Два хэша считаются равными, когда они имеют один и тот же набор ключей, а значение каждой клавиши равно таковой в другом хэше.

Итак, если значения reports будут отличаться, uniq не уронит ваши хеши.

1

Array#uniq

сравнивает значения с использованием их hash и eql? метод для повышения эффективности.

Таким образом, ответ на ваш вопрос

, насколько уверенно я могу быть, что я не буду терять все данные при использовании Uniq

лежит в том, как uniq работ. Напишите несколько тестов, поиграйте с hash и eql? способами (и см. Ответ @ Sergio о порядке сравнения хэшей).

Смежные вопросы