Ruby uniq是否适用于具有嵌套元素的哈希数组

时间:2016-12-09 07:52:16

标签: ruby

我有一个哈希数组,在每个哈希中我都有一个嵌套结构:

{
        "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时不会丢失任何数据,我有多自信?

2 个答案:

答案 0 :(得分:3)

当测试相等性(uniq所做的)时,数组和散列将逐个元素进行比较。

如果它们各自的元素相等,则认为两个数组相等。当两个哈希具有相同的密钥集并且每个密钥的值等于另一个哈希值时,它们被认为是相等的。

因此,如果reports值不同,则uniq不会丢弃您的哈希值。

答案 1 :(得分:1)

Array#uniq

  

使用hasheql?方法比较值,以提高效率。

所以回答你的问题

  

我有信心在使用uniq

时我不会丢失任何数据

取决于uniq的工作原理。写一些测试,使用hasheql?方法来确定(并查看@ Sergio在哈希比较顺序上的答案)。