如何实现Hash#all?多维哈希?
问题描述:
考虑到我有这些散列:如何实现Hash#all?多维哈希?
h1 = {"a" => { "b" => 1, "c" => {"d" => 2, "e" => 3} } }
h2 = {"a" => { "b" => 1, "c" => nil } }
而且我希望这些结果:
h1.multi_all? # true
h2.multi_all? # false
我将如何实现multi_all方法?
答
class Hash
def multi_all? &block
all? do |key, value|
if value.is_a?(Hash)
value.multi_all?(&block)
elsif block == nil
value
else
block[key, value]
end
end
end
end
答
class Hash
def values_r # recursive values
self.values.map do |x|
x.is_a?(Hash) ? x.values_r : x
end
end
end
h1.values_r.flatten.all?
PS:你知道吗all?
方法也接受块吗?
还是这样? `class Hash def r_all? self.values.map do | x | x.is_a?(哈希)? x.r_all? :x end.all? 结束 结束` – maprihoda 2011-12-13 20:33:30
您的变体忽略`&block` – 2011-12-13 20:50:11