在.yaml文件中。我知道如何在
中保存x,yworld:
radius: 20
x: -70
y: -30
我的问题是我可以用以下格式保存吗
world:
radius: 20
[-30, -70]
基本上,我想在一行中存储两个浮点数(x,y)。
我用c ++编程
答案 0 :(得分:1)
发出序列时,可以在YAML::Flow
前加上序列。来自documentation:
YAML::Emitter out;
out << YAML::Flow;
out << YAML::BeginSeq << 2 << 3 << 5 << 7 << 11 << YAML::EndSeq;
产生
[2, 3, 5, 7, 11]
答案 1 :(得分:1)
不,你不能,不是你所描述的方式。您可以通过在线YAML解析器(例如this解析器)粘贴所需的输出来轻松测试,或者,如果您安装了Python,则可以通过安装virtualenv并执行¹:
pip install ruamel.yaml.cmd
yaml round-trip input.yaml
您的所需输出在顶层有一个带有键world
的映射,其值以映射开头(带有键radius
和值20
)然后切换到流式样序列:[-30, -70]
。这是不正确的,你不能将映射键值对与序列混合。
有几种方法可以解决这个问题。你可以这样做:
world:
radius: 20
[-30, -70]:
这是非常精细的YAML,对-30, -70
是值null
的键,不需要明确。请注意,一些YAML解析器不支持此表单,我链接的表单。
IMO,最合乎逻辑的单线解决方案:
world:
radius: 20
[x, y]: [-30, -70]
您可以通过编译和运行获得:
#include <iostream>
#include "yaml-cpp/yaml.h"
int main()
{
YAML::Emitter out;
out << YAML::BeginMap;
out << YAML::Key << "world";
out << YAML::Value << YAML::BeginMap;
out << YAML::Key << "radius";
out << YAML::Value << 20;
out << YAML::Key << YAML::Flow << YAML::BeginSeq << "x" << "y" << YAML::EndSeq;
out << YAML::Key << YAML::Flow << YAML::BeginSeq << "-30" << "-70" << YAML::EndSeq;
std::cout << out.c_str() << "\n";
return 0;
}
您的第一个YAML示例也是无效的YAML:您应该在映射中对齐键而不是冒号:
world:
radius: 20
x: -70
y: -30
¹免责声明:我是ruamel.yaml.cmd
包的作者。如果您的YAML文件包含敏感数据,则使用本地测试非常重要。