映射是否与重复的键值对向后兼容?

时间:2019-03-30 00:56:59

标签: protocol-buffers protobuf-java

我可以使用

message Foo {
  map<string, string> foo = 1;
}

代替

message Foo {
  repeated KeyValuePair foo = 1;
}

message KeyValuePair {
  string key = 1;
  string value = 2;
}

第一个来源在proto3中,第二个来源在proto2中。

1 个答案:

答案 0 :(得分:1)

只要您没有重复的键,它们就会非常相似。如果您有重复的键,则使用映射将具有不同的行为,因为重复将导致覆盖或异常(对不起,我无法回忆起)。同样,“重复”通常实现为列表/数组/等,因此:顺序得以保留。 “地图”通常以某种地图/字典结构实现,通常会保证顺序。

所以:如果顺序无关紧要,并且您始终拥有唯一的键:就可以了。