1

YAMLリスト内のアイテムの数を確認したり、新しいyaml-cpp apiを使用してエントリが存在するかどうかを確認したりする方法はありますか?たとえば、私がリストを持っているとしましょう

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

食べ物の数を確認するにはどうすればよいですか?また、YAML文字列に食べ物が含まれているかどうかを確認する方法はありますか?root_node["Foods"]["fruit"].as<int>()果物が存在しない場合は、食品のようにインデックスを作成して例外をキャッチすることができますが、古いAPI( http://code.google.com/p/yaml )にFindValue()と同様の関数があります。 -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 に答える