1

有没有办法确定 YAML 列表中的项目数,或者使用新的 yaml-cpp api 检查条目是否存在?例如,假设我有清单

Food:
  - pizza: 270
  - ice_cream: 90
  - fruit: 30

如何确定食物的数量?另外,有没有办法检查 YAML 字符串中是否存在食物?root_node["Foods"]["fruit"].as<int>()我知道如果水果不存在,我可以尝试对食物进行索引并捕获异常,但是在旧 api 中是否有类似于 FindValue() 的函数( http://code.google.com/p/yaml -cpp/wiki/HowToParseADocument ) 检查条目是否存在?

4

1 回答 1

1

要获取食物的数量,请使用

root_node["Food"].size();

在您的示例中检查食物是否存在有点棘手,因为它是一系列地图,每个地图都有一个键/值对。(这通常用于创建有序映射。)您只需遍历每个条目并检查它是否是您想要的:

bool does_food_exist(const std::string& name) {
    for(std::size_t i=0;i<root_node["Food"].size();i++) {
        if(root_node["Food"][i][name])
            return true;
    }
    return false;
}

相反,如果您的意思是实际拥有一个实际的地图,那么您的 YAML 文件应该如下所示:

Food:
  pizza: 270
  ice_cream: 90
  fruit: 30

在这种情况下,检查食物是否存在很容易:

if(root_node["Food"]["fruit"]) {
    // "fruit" exists
} else {
    // it doesn't exist
}
于 2012-06-13T20:22:59.873 回答