比如哈希a
是{:name=>'迈克',:age=>27,:gender=>'男性'}
,哈希b
是{:name=>'迈克'}
我想知道是否有更好的方法来判断b
哈希是否在a
哈希中,而不是逐个比较每个键?
我找到了一种方法,这比比较键更有效吗?
a.merge(b)==a
比如哈希a
是{:name=>'迈克',:age=>27,:gender=>'男性'}
,哈希b
是{:name=>'迈克'}
我想知道是否有更好的方法来判断b
哈希是否在a
哈希中,而不是逐个比较每个键?
我找到了一种方法,这比比较键更有效吗?
a.merge(b)==a
我喜欢计算交集的方法,这正是你所试图做的:
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
b.all? do |key, value|
a.include? key &&
a[key] == value
end
这个循环在b的大小上是线性的,因为循环内的两个步骤(平均而言)都需要恒定的时间。
include?
改为has_key?
,这样更清晰一些。而且为什么要为第二个条件创建一个新的(未缩进的)行呢? - tokland