我有一个哈希数组,我想要其中的唯一值。打电话Array.uniq
给我的不是我所期望的。
a = [{:a => 1},{:a => 2}, {:a => 1}]
a.uniq # => [{:a => 1}, {:a => 2}, {:a => 1}]
我期望的地方:
[{:a => 1}, {:a => 2}]
在网上四处搜索,我没有想出一个我满意的解决方案。人们建议重新定义Hash.eql?
and Hash.hash
,因为那Array.uniq
是查询的内容。
编辑:我在现实世界中遇到这个问题时,哈希值稍微复杂一些。它们是具有多个字段的解析 JSON 的结果,其中一些值也是哈希值。我有一系列想要过滤掉唯一值的结果。
我不喜欢重新定义Hash.eql?
和Hash.hash
解决方案,因为我要么必须Hash
全局重新定义,要么为数组中的每个条目重新定义它。更改Hash
每个条目的定义会很麻烦,特别是因为每个条目内部可能有嵌套的哈希值。
全球变化Hash
具有一定的潜力,特别是如果它是暂时完成的。我想构建另一个类或辅助函数来包装保存旧定义并恢复它们,但我认为这增加了比实际需要更多的复杂性。
使用inject
似乎是重新定义Hash
.