protobuffers 中的重复字段是否保持插入的顺序?

Alp*_*DIN 8 protocol-buffers protobuf-c

考虑以下消息。

message example { 
   repeated string text; 
}
Run Code Online (Sandbox Code Playgroud)

假设在 C++ 中,我将一个字符串列表插入到示例的文本字段中:

exemple aMessage; 
std::list<std::string> aList = ... ;
for (std::string anStr : aList) 
{
    aMessage.add_text(anStr);
}
Run Code Online (Sandbox Code Playgroud)

稍后,如果我访问我的消息文本,该字段的排序方式是否与我的列表相同?当我将它序列化并将其发送到某个地方时呢?

订单会保持不变吗?

jpa*_*jpa 9

是的,重复的字段会保留项目的顺序。

来自Google 的 Protocol Buffers 编码规范

解析时,元素相互之间的顺序会被保留,但相对于其他字段的顺序会丢失。

  • 恐怕我不明白这句话的第二部分是什么意思。 (5认同)
  • 虽然问题被标记为 C,但顺序是协议的一部分,因此它适用于任何语言的实现。 (5认同)
  • @AlperenAYDIN 如果您有“重复字符串 textA”和“重复字符串 textB”,则保留“textA”和“textB”数组中的顺序。但是,从技术上讲,您可以以编码形式创建一条消息,即`textA[0]、textB[0]、textA[1]、textB[1]`,但在解码和重新编码后,它看起来像`textA[0],文本A[1]、文本B[0]、文本B[1]`。 (3认同)