Maps
如果想常见一个关联的map作为数据定义的一部分, protocol buffers 提供方便的快捷语法:
map<key_type, value_type> map_field = N;
key_type可以是任意整型或者字符类型(除了floating point和bytes外任何简单类型),请注意,枚举不是有效的key_type。值类型可以是除其他map以外的任何类型。
如果你想创建一个projects的map, 每个Project消息都关联到一个string key, 可以这样定义:
map<string, Project> projects = 3;
- map字段不能为 repeated。
- map元素不能保持特定顺序。
- 如果存在重复的映射键,则使用最后看到的键。
- 如果为映射字段提供键但没有值,则序列化字段时的行为与语言相关。在C++、java和python中,类型的默认值被序列化,而在其他语言中没有任何序列化。
向后兼容
对于不支持map的protocol buffers实现仍然可以处理您的数据:
message MapFieldEntry {
key_type key = 1;
value_type value = 2;
}
repeated MapFieldEntry map_field = N;