我正在使用 Protobuf 3。从文档中,似乎无法定义嵌套映射:
message MyMessage {
map<string, map<string, string>> nestedMap = 1; // doesn't work
}
我正在尝试创建一个消息类型来表示期权链的定价信息(买入价和卖出价)。对于那些不熟悉这些金融工具的人,基本上,我有一套“到期日(YYYYMMDD)”。在这些到期日期中的每一个中,我都有一组“罢工(浮点数;如有必要,可以表示为字符串,我可以接受)”。在每次行使中,我有 2 个选项,一个“看跌”和一个“看涨”(这称为期权的“权利”)。这些选项中的每一个都将包含一个“出价”和一个“要价”。
从概念上讲,我想要类似的东西
message OptionChain {
// doesn't work:
map<Expiration, map<Strike, map<Right, BidAskData>>> whatever = 1;
}
我发现的替代方案是这样的:
message OptChain {
map<string, OptChainExpirations> expirations = 1;
}
message OptChainExpirations {
map<string, OptChainExpirationsStrikes> strikes = 1;
}
message OptChainExpirationsStrikes {
OptBidAsk put = 1;
OptBidAsk call = 2;
}
message OptBidAsk {
double bid = 1;
double ask = 2;
// any other fields that might be necessary in the future
}
这似乎有效。但这似乎也给我的系统增加了不必要的复杂性,因为它定义了大量的“中间”消息。
有没有其他选择?
谢谢!
编辑:对于一些额外的上下文:
最佳答案
对我来说,你的中间消息类型的替代方案似乎很好。稍微简化命名可能是值得的,例如Strike
而不是 OptChainExpirationsStrikes
。如果您担心名称冲突,请将其全部放在自己的命名空间/包中。
还要考虑您是要根据字符串键查找罢工,还是作为普通的重复字段会更好。
关于protocol-buffers - Protobuf,嵌套映射?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38863661/