我正在尝试比较具有非常相似哈希结构(相同且始终存在的键)的两个哈希数组并返回两者之间的增量 - 具体来说,我想捕获以下内容:
array1
其中不存在的哈希部分array2
array2
其中不存在的哈希部分array1
- 出现在两个数据集中的哈希值
这通常可以通过简单地执行以下操作来实现:
deltas_old_new = (array1-array2)
deltas_new_old = (array2-array1)
对我来说问题(这已经变成了 2-3 小时的斗争!)是我需要根据散列中 3 个键的值('id'、'ref'、'name')来识别增量——这 3 个键的值实际上构成了我的数据中的唯一条目——但我必须保留散列的其他键/值对(例如'extra'
,为简洁起见,未显示许多其他键/值对。
示例数据:
array1 = [{'id' => '1', 'ref' => '1001', 'name' => 'CA', 'extra' => 'Not Sorted On 5'},
{'id' => '2', 'ref' => '1002', 'name' => 'NY', 'extra' => 'Not Sorted On 7'},
{'id' => '3', 'ref' => '1003', 'name' => 'WA', 'extra' => 'Not Sorted On 9'},
{'id' => '7', 'ref' => '1007', 'name' => 'OR', 'extra' => 'Not Sorted On 11'}]
array2 = [{'id' => '1', 'ref' => '1001', 'name' => 'CA', 'extra' => 'Not Sorted On 5'},
{'id' => '3', 'ref' => '1003', 'name' => 'WA', 'extra' => 'Not Sorted On 9'},
{'id' => '8', 'ref' => '1002', 'name' => 'NY', 'extra' => 'Not Sorted On 7'},
{'id' => '5', 'ref' => '1005', 'name' => 'MT', 'extra' => 'Not Sorted On 10'},
{'id' => '12', 'ref' => '1012', 'name' => 'TX', 'extra' => 'Not Sorted On 85'}]
预期结果(3 个独立的哈希数组):
array1
包含数据但不包含数据的对象array2
--
[{'id' => '2', 'ref' => '1002', 'name' => 'NY', 'extra' => 'Not Sorted On 7'},
{'id' => '7', 'ref' => '1007', 'name' => 'OR', 'extra' => 'Not Sorted On 11'}]
array2
包含数据但不包含数据的对象array1
--
[{'id' => '8', 'ref' => '1002', 'name' => 'NY', 'extra' => 'Not Sorted On 7'},
{'id' => '5', 'ref' => '1005', 'name' => 'MT', 'extra' => 'Not Sorted On 10'},
{'id' => '12', 'ref' => '1012', 'name' => 'TX', 'extra' => 'Not Sorted On 85'}]
包含数据的对象array1
和array2
--
[{'id' => '1', 'ref' => '1001', 'name' => 'CA', 'extra' => 'Not Sorted On 5'},
{'id' => '3', 'ref' => '1003', 'name' => 'WA', 'extra' => 'Not Sorted On 9'}]
我已经尝试过无数次尝试比较迭代数组和使用Hash#keep_if
基于 3 个键以及将两个数据集合并到一个数组中,然后尝试基于重复数据进行重复,array1
但我一直空手而归。提前感谢您的时间和帮助!