我有以下YAML文件:
position_details:
star_performer:
title: "Star Performer"
description: ""
idiot of year:
title: "idiot of year"
description: "The Idiot of year Award recognizes excellence in anti - social collaboration on social platform ."
我需要收集相关title
不存在的description
,例如从上面的文件我需要收集标题"Star Performer"
。我怎样才能做到这一点?
答案 0 :(得分:3)
如果您的意思是过滤器,则需要收集这些标题
data = YAML.load(File.read(File.expand_path('path/to/your.yml', __FILE__)))
positions_with_no_description = data["position_details"].each_value.collect do |pos|
pos["title"] if pos["description"].empty?
end
根据toro2k的评论,如果你使用的是Rails,你可以替换空白吗?为空?涵盖没有描述密钥的情况。
此外,这将为您提供包含nil值的数组positions_with_no_description
。要消除它们,只需致电compact!
上述简洁版可能是:
filtered = data["position details"]
.each_value
.collect { |p| p["title"] if p["description"].blank? }
.compact!
我已经在你的测试yml文件上对它进行了测试,但它确实有效。错误是我错误地使用了"position_details"
,而你把“位置细节”作为你的关键 - 没有下划线。
我刚从IRB那里测试过的确切代码:
> data = YAML.load(File.read(File.expand_path('../test.yml', __FILE__))
> data["position details"].each_value.collect { |x| x["title"] if x["description"].empty? }.compact!
> # => ["Star Performer"]