我有一个哈希数组,在每个哈希中我都有一个嵌套结构:
{
"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
时不会丢失任何数据,我有多自信?
答案 0 :(得分:3)
当测试相等性(uniq
所做的)时,数组和散列将逐个元素进行比较。
如果它们各自的元素相等,则认为两个数组相等。当两个哈希具有相同的密钥集并且每个密钥的值等于另一个哈希值时,它们被认为是相等的。
因此,如果reports
值不同,则uniq
不会丢弃您的哈希值。
答案 1 :(得分:1)
所以回答你的问题
我有信心在使用uniq
时我不会丢失任何数据
取决于uniq
的工作原理。写一些测试,使用hash
和eql?
方法来确定(并查看@ Sergio在哈希比较顺序上的答案)。