地图是否向后兼容重复的键值对?

Is a map backwards compatible with a repeated keyvaluepair?

我可以使用

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

代替

message Foo {
  repeated KeyValuePair foo = 1;
}

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

?

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

只要您没有重复的密钥,它们就会非常相似。如果您有重复的键,使用地图会有不同的行为,因为 duplicatws 会导致覆盖或异常(我不记得是哪个,抱歉)。此外,"repeated" 通常实现为 list/array/etc,因此:保留顺序。 "map" 通常使用某种 map/dictionary 结构来实现,其中通常保证顺序 而不是

因此:如果顺序无关紧要并且您始终拥有唯一键:您没问题。