2012-06-13 19 views
1

是否有方法確定YAML列表中的項目數量,或者使用新的yaml-cpp api檢查項目是否存在?例如,說我有名單使用yaml-cpp new api確定列表中項目的數量

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

如何確定有哪些食物的數量?另外,有沒有辦法檢查YAML字符串中是否存在食物?我知道我可以嘗試索引root_node["Foods"]["fruit"].as<int>()這樣的食物,並在水果不存在的情況下捕獲異常,但是在舊的API(http://code.google.com/p/yaml-cpp/wiki/HowToParseADocument)中是否有類似於FindValue()的函數來檢查條目是否存在?

回答

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 
} 
相關問題