【问题标题】: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);
}

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

订单会保持不变吗?

【问题讨论】:

    标签: protocol-buffers protobuf-c


    【解决方案1】:

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

    来自Google's Protocol Buffers encoding specification

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

    【讨论】:

    • 我恐怕不明白这句话的第二部分是什么意思。
    • @AlperenAYDIN 如果您有repeated string textArepeated string textB,则保留textAtextB 数组中的顺序。但是,从技术上讲,您可以以编码形式创建 textA[0], textB[0], textA[1], textB[1] 的消息,但在解码和重新编码后,它将看起来像 textA[0], textA[1], textB[0], textB[1]
    • 我明白了。谢谢。
    • 虽然问题用 C 标记,但排序是协议的一部分,因此它适用于任何语言的实现。
    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2010-11-05
    • 2010-12-09
    相关资源
    最近更新 更多