如何在协议缓冲区中表示二维数组?

如何在协议缓冲区中表示二维数组?

我需要将和2d数组存储为PB消息上的字段,例如:intdouble

int[][] multi = new int[5][10];

我使用的是C++,Java和C#。

提前致谢。


答案 1

协议中没有对此的直接支持。你最好的选择是有一组重复的对象,每个对象都有一个数组 - 即

message Foo {
    repeated int items = 1;
}
...
repeated Foo foos = 1;

答案 2

你可以试试 structpb。喜欢这个:

.proto

import "google/protobuf/struct.proto";
message Foo {
    repeated google.protobuf.Value array = 1;
}

.go

import (
    "google.golang.org/protobuf/types/known/structpb"
    "google.golang.org/protobuf/encoding/protojson"
)

...
foo := &Foo{}

items := []interface{}{1,2,3,4,5}
l, err := structpb.NewList(items)
foo.array = append(foo.array, structpb.NewListValue(l))

protojson.Format(foo)  // [[1,2,3,4,5]]

推荐