protobuffers 中的重复字段是不是保持插入的顺序?
Posted
技术标签:
【中文标题】protobuffers 中的重复字段是不是保持插入的顺序?【英文标题】:Does repeated fields in protobuffers keep the order they are inserted?protobuffers 中的重复字段是否保持插入的顺序? 【发布时间】:2019-03-08 12:39:12 【问题描述】:考虑以下消息。
message example
repeated string text;
假设在 C++ 中,我有一个插入到示例文本字段中的字符串列表:
exemple aMessage;
std::list<std::string> aList = ... ;
for (std::string anStr : aList)
aMessage.add_text(anStr);
稍后,如果我访问消息的文本,该字段的排序方式是否与我的列表相同?当我将其序列化并将其发送到某个地方时呢?
订单会保持不变吗?
【问题讨论】:
【参考方案1】:是的,重复的字段保持项目的顺序。
来自Google's Protocol Buffers encoding specification:
解析时会保留元素之间的相互关系,但会丢失相对于其他字段的顺序。
【讨论】:
我恐怕不明白这句话的第二部分是什么意思。 @AlperenAYDIN 如果您有repeated string textA
和repeated string textB
,则保留textA
和textB
数组中的顺序。但是,从技术上讲,您可以以编码形式创建 textA[0], textB[0], textA[1], textB[1]
的消息,但在解码和重新编码后,它将看起来像 textA[0], textA[1], textB[0], textB[1]
。
我明白了。谢谢。
虽然问题用 C 标记,但排序是协议的一部分,因此它适用于任何语言的实现。以上是关于protobuffers 中的重复字段是不是保持插入的顺序?的主要内容,如果未能解决你的问题,请参考以下文章