【发布时间】:2014-10-07 01:54:19
【问题描述】:
我有两个包含多个哈希的哈希(产品信息)。
我想做的是比较两个哈希值,看看添加、删除、更新了哪些产品(例如价格、描述、图片)。
old_hash.size
# => 24595
new_hash.size
# => 26153
这两个哈希的结构如下所示:
{"wi230075"=>
{"itemId"=>"wi230075",
"description"=>"AH Verse frietaardappelen",
"salesUnitSize"=>"2,5 kg",
"images"=>[...]
"fromPrice"=>2.19,
"basePrice"=>{"price"=>2.19, "unitPriceDescription"=>"0.96/KG"},
"score"=>0,
"frozen"=>false,
"isPBO"=>false,
"outOfStock"=>false,
"quantity"=>0,
"extendedAttributes"=>[],
"sourceId"=>{"source"=>"wi", "id"=>230075, "asString"=>"wi230075"},
"hqIdSource"=>"AH_HQ",
"hqId"=>822729,
"productId"=>230075,
"links"=>[],
"category"=>"/Aardappel, groente, fruit/Aardappelen/Hele aardappel/",
"brand"=>"AH"},
{...}
}
我尝试使用HashDiff gem 比较两个哈希值。这是我得到的:
diff = HashDiff.diff(old_hash, new_hash)
diff.size
# => 64378
好像出了点问题,不能有 64378 的变化。
比较两个哈希值的更好方法是什么?
编辑:
我只想知道产品是否被添加、删除或编辑。如果是这样,一个简单的true 就足够了。
【问题讨论】:
-
那个 gem 不会知道要比较哪些内部哈希值,这就是为什么在你得到的输出中一切看起来都不同的原因。
-
为什么你认为不能有
64378的区别?一个新的顶级元素将产生N补丁,其中N是子键的数量。仔细查看文档。 -
这可能应该使用数据库来完成。他们真的很擅长解决这类问题。
-
@mudasobwa 因为大约 1% 的产品略有变化,例如价格或描述。
-
@narzero 1500 条全新记录产生
N×1500差异。这很容易给出 64K。如果您只需要检查现有产品的差异,则应在与old_hash相交的new_hash上运行HashDiff。