Ruby 一个散列是否包含另一个散列
假设我们有“深度散列”,比如: 或Ruby 一个散列是否包含另一个散列,ruby,Ruby,假设我们有“深度散列”,比如: 或 a包括b,反之亦然 以下是我的尝试: class Hash def >=(b) eq ||= true b.each do |k, v| if !(self.include? k) eq = false elsif ( ((self[k]&&v).is_a? Hash) && !((v||self[k]).empty?) ) se
a
包括b
,反之亦然
以下是我的尝试:
class Hash
def >=(b)
eq ||= true
b.each do |k, v|
if !(self.include? k)
eq = false
elsif ( ((self[k]&&v).is_a? Hash) && !((v||self[k]).empty?) )
self[k]>=v
end
end
return eq
end
end
a >= b # true
b >= a # false
简短版本:
class Hash
def >=(b)
eq = true
b.each { |k, v| eq &= !(self.include? k) ? false : ( ( ((self[k]&&v).is_a? Hash) && !((v||self[k]).empty?) ) ? self[k]>=v : true)}
return eq
end
end
我的问题是:还有更优雅的方法吗?功能性方法:
class Hash
def >=(other)
other.all? do |key, value|
if self.has_key?(key)
value.is_a?(Hash) ? (self[key].is_a?(Hash) && self[key] >= value) : (self[key] == value)
else
false
end
end
end
end
功能方法:
class Hash
def >=(other)
other.all? do |key, value|
if self.has_key?(key)
value.is_a?(Hash) ? (self[key].is_a?(Hash) && self[key] >= value) : (self[key] == value)
else
false
end
end
end
end
看起来你被淘汰了(:@ted:看来,这是一个有趣的问题。请注意,你也可以使用
all?
之前的条件进行操作,在执行任何操作之前检查你是否拥有所有密钥:if(other.keys-self.keys).empty?…all?这里没有if.has_键也没有else…else false的东西看起来你退出了比赛(:@ted:看来,这是一个有趣的问题。请注意,你也可以使用all?
之前的条件来执行此操作,在执行任何操作之前检查你是否拥有所有的键:if(other.keys-self.keys)。此处为空?…all?填充,不带if.has\u键,也不带else…else false
class Hash
def >=(other)
other.all? do |key, value|
if self.has_key?(key)
value.is_a?(Hash) ? (self[key].is_a?(Hash) && self[key] >= value) : (self[key] == value)
else
false
end
end
end
end