gpt4 book ai didi

ruby-on-rails - 比较ruby中两个相似的哈希值

转载 作者:数据小太阳 更新时间:2023-10-29 07:31:12 26 4
gpt4 key购买 nike

我使用的是 ruby​​ 1.8.7,我需要比较我拥有的两个哈希值,它们本质上是模型的属性。哈希 A 比哈希 B 小,哈希 B 具有哈希 A 的所有属性,外加一些我不关心的额外属性。我的总体目标是查看 A 的元素是否与 B 的相应元素相同。例如

@hash_a = {:cat => 'Bubby', :dog => 'Gizmo'}  
@hash_b = {:cat => 'Bubby', :dog => 'Gizmo', :lion => 'Simba'}
@hash_a == @hash_b
#=> true

现在它变得比这更复杂一点,因为字段不完全匹配,即使它们引用相同的信息

@hash_a = {:cats_name => 'Bubby', :dog => 'Gizmo'}  
@hash_b = {:cat => 'Bubby', :dog => 'Gizmo', :lion => 'Simba'}
@hash_a == @hash_b
#=> true

我正在处理的是一个比较两个匹配项的过程,如果字段发生变化则更新它,并且仅当它们发生变化时。或者,如果找不到匹配项,则创建一个新项。更改哈希本身的名称不是一种选择。目前我只是比较私有(private)方法中的每个字段,看看它们是否相等。

return hash_a[:cat] == hash_b[:cats_name] && hash_a[:dog] == hash_b[:dog] 

我觉得必须有更好的方法,我正在寻找比这更快、更优雅的方法。

最佳答案

如果将散列转换为数组,则可以像这样比较它们。

@hash_a.to_a == (@hash_a.to_a & @hash_b.to_a)

如果需要,您也可以将此代码隐藏在哈希类中的方法后面:

class Hash
def diff_equal(other)
to_a == (to_a & other.to_a)
end
end

然后像@hash_a.diff_equal(@hash_b)一样使用它。如果您选择了该路径,您可能需要检查 other 是否为哈希或响应 to_a 方法。

关于ruby-on-rails - 比较ruby中两个相似的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3763795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com