我的目标是确定哈希中是否有空格,如下所示:
{"departure_time_slots"=>{"date"=>[""], "time"=>{"start"=>[""], "end"=>[""]}}}
字符串可以任意嵌套。我不想手动检查它们中的每一个。如果我可以提取所有字符串而不管它们的深度如何,那就太好了。有没有一种简单的方法可以做到这一点?
我的目标是确定哈希中是否有空格,如下所示:
{"departure_time_slots"=>{"date"=>[""], "time"=>{"start"=>[""], "end"=>[""]}}}
字符串可以任意嵌套。我不想手动检查它们中的每一个。如果我可以提取所有字符串而不管它们的深度如何,那就太好了。有没有一种简单的方法可以做到这一点?
这是一个如何提取值的示例。但是,您仍然会遇到将值与键匹配的问题。你不可能同时拥有两者。
# Extend the Hash class
class Hash
def recursive_values
self.values.collect { |v|
v.is_a?(Hash) ? v.recursive_values : v
}.flatten
end
end
用法:
h = {"departure_time_slots"=>{"date"=>[""], "time"=>{"start"=>[""], "end"=>[""]}}}
h.recursive_values
=> ["", "", ""]
不不可能。因为它们彼此完全存在于不同的范围内。例如。键start
并且end
是完全未知的并且被departure_time_slots
上面示例中的对象屏蔽。
一种方法可能是,再次获取哈希图类型的哈希图的所有值并递归地获取它们的键。
从该映射的值列表中获取键,departure_time_slots
然后从每个值中找到所有键,如果那是一个哈希映射。除此之外,我认为没有其他方法。
PS附带说明,看看你是否可以将你的结构修改为一个数组,其中元素也可以是数组,并尝试使用数组的扁平化概念。:P
如果你会这样使用会更好:
departure_time_slots = {:date => Time.new, :time_start => nil, :time_end => nil}
当您在 Hash 中使用键时,最好使用符号作为键。(http://www.ruby-doc.org/core-1.9.3/Symbol.html)