将struct数组转换为结构的单元格,反之亦然

时间:2017-11-17 13:27:04

标签: matlab octave cell-array matlab-struct

我经常需要使用结构数组和包含具有相同字段名称的标量结构的单元格,我将其称为“解包结构数组”,我想知道Matlab和/或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

1 个答案:

答案 0 :(得分:4)

这似乎可以做你想要的:

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