地图是否向后兼容重复的键值对?
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 结构来实现,其中通常保证顺序 而不是 。
因此:如果顺序无关紧要并且您始终拥有唯一键:您没问题。
我可以使用
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 结构来实现,其中通常保证顺序 而不是 。
因此:如果顺序无关紧要并且您始终拥有唯一键:您没问题。