有没有更好的方法来判断一个ruby哈希是否在另一个内?

时间:2011-11-28 03:10:18

标签: ruby hash

例如哈希a{:name=>'mike',:age=>27,:gender=>'male'} 哈希b{:name=>'mike'}

我想知道是否有更好的方法来判断b散列是否在a散列内,而不是逐个比较每个键?

我找到了一种方法,这比比较键更有效吗?

a.merge(B)==一个

2 个答案:

答案 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的大小上是线性的,因为循环内的两个步骤(平均)取恒定时间。