将结构数组转换为结构单元,反之亦然
Convert struct array to cell of structs and vice versa
我经常需要处理包含具有相同字段名的标量结构的结构数组和单元格,我称之为 "unpacked struct array" 我想知道 Matlab and/or GNU Octave 中是否还没有函数有助于在这两种表示之间进行转换。
结构数组:
foo(1).a = 3;
foo(1).b = pi;
foo(2).a = 5;
foo(2).b = 2.718;
显然 num2cell
在 GNU Octave (although it isn't mentioned in the docs) 中以一种方式工作:
ret = num2cell (foo)
ret =
{
[1,1] =
scalar structure containing the fields:
a = 3
b = 3.1416
[1,2] =
scalar structure containing the fields:
a = 5
b = 2.7180
}
但我正在寻找相反的部分,将 ret
转换回 foo
。
这似乎符合您的要求:
foo2 = [ret{:}]; % or equivalently foo2 = horzcat(ret{:});
也就是说,只是水平连接元胞数组的内容。
检查:
>> foo(1).a = 3;
foo(1).b = pi;
foo(2).a = 5;
foo(2).b = 2.718;
>> ret = num2cell (foo);
>> foo2 = [ret{:}];
>> isequal(foo, foo2)
ans =
logical
1
我经常需要处理包含具有相同字段名的标量结构的结构数组和单元格,我称之为 "unpacked struct array" 我想知道 Matlab and/or GNU Octave 中是否还没有函数有助于在这两种表示之间进行转换。
结构数组:
foo(1).a = 3;
foo(1).b = pi;
foo(2).a = 5;
foo(2).b = 2.718;
显然 num2cell
在 GNU Octave (although it isn't mentioned in the docs) 中以一种方式工作:
ret = num2cell (foo)
ret =
{
[1,1] =
scalar structure containing the fields:
a = 3
b = 3.1416
[1,2] =
scalar structure containing the fields:
a = 5
b = 2.7180
}
但我正在寻找相反的部分,将 ret
转换回 foo
。
这似乎符合您的要求:
foo2 = [ret{:}]; % or equivalently foo2 = horzcat(ret{:});
也就是说,只是水平连接元胞数组的内容。
检查:
>> foo(1).a = 3;
foo(1).b = pi;
foo(2).a = 5;
foo(2).b = 2.718;
>> ret = num2cell (foo);
>> foo2 = [ret{:}];
>> isequal(foo, foo2)
ans =
logical
1