我正在使用以下代码从我的游戏的plist中读取数据:
int levelNum = SOME_VALUE_FROM_OUTSIDE;
ValueMap mapFile = FileUtils::getInstance()->getValueMapFromFile("LevelDetails.plist");
std::string strLevel = std::to_string(levelNum);
ValueMap mapLevel = mapFile.at(strLevel).asValueMap();
LevelDetails.plist是一个以字典为根的plist。问题是在某些情况下可能没有名为levelNum / strLevel的键。因此,在运行此行之前,我必须检查密钥是否存在:
ValueMap mapLevel = mapFile.at(strLevel).asValueMap(); //Throws exception occasionally
那么检查名为levelNum / strLevel的键是否存在的正确方法是什么?
最佳答案
由于ValueMap是std::unordered_map,因此可以使用该类中的方法:
if (mapFile.count(strLevel).count() > 0) {
ValueMap mapLevel = mapFile.at(strLevel).asValueMap();
}
在cocos2d-x中ValueMap的声明是:
typedef std::unordered_map<std::string, Value> ValueMap;