まくろぐ
更新: / 作成:

Protocol Buffers でマップ型のフィールドを定義するには、map<key_type, value_type> という形式で型を指定します。 次の SampleMessage メッセージ型は、string 型のキーと Project 型の値を持つマップフィールドを定義しています。

sample.proto(map 型フィールドの例)
message SampleMessage {
  // ...
  map<string, Project> projects = 3;
}

message Project {
  // ...
}

キーの型 (key_type) には、整数あるいは文字列 を指定することができます。 浮動小数点数 (float, double) やバイトデータ (bytes) を key_type にすることはできません。

値の型 (value_type) としては、ほぼすべての型 を指定できますが、マップ型だけは value_type にすることはできません。 つまり、マップのマップは表現できないことになるのですが、value_type として他のメッセージ型を持たせることができるので(上記の例では Project)、実際にはほぼ同様の情報を表現できます。

あと、あまり困ることはないでしょうが、Protocol Buffers ではマップの配列(リスト)は表現できません(つまり、repeated map<xxx, yyy> とはできません)。

関連記事

まくろぐ
サイトマップまくへのメッセージ