例如哈希a
是{:name=>'mike',:age=>27,:gender=>'male'}
哈希b
是{:name=>'mike'}
我想知道是否有更好的方法来判断b
散列是否在a
散列内,而不是逐个比较每个键?
我找到了一种方法,这比比较键更有效吗?
a.merge(B)==一个
答案 0 :(得分:5)
我喜欢计算交叉点的方法,这就是你要做的事情:
a = { :a => :b, :c => :d }
b = { :e => :f, :a => :b }
c = { :a => :f, :e => :c }
(a.to_a & b.to_a).any? # => true
(a.to_a & c.to_a).any? # => false
答案 1 :(得分:1)
b.all? do |key, value|
a.include? key &&
a[key] == value
end
这个循环在b的大小上是线性的,因为循环内的两个步骤(平均)取恒定时间。