matlab结构类型丢失类型的单元格数组字段?

时间:2014-12-08 21:44:00

标签: arrays matlab

我想使用struct()在Matlab函数中返回各种值。其中之一是细胞阵列。这是一个例子:

xnames = cell( 3, 1 ) ;
for i = [1:3]
   xnames{i} = sprintf( 'V_%d', i ) ;
end

a = 1 ;
b = 2 ;
r = struct( 'a', a, 'b', b, 'x', xnames ) ;

但是,如果我尝试访问r.x,则原始单元标识似乎丢失了:

x = r.x ;
x{1}

这会导致错误:'来自非单元数组对象的单元格内容引用。'字符串数据似乎在那里,因为r.x的显示显示:

ans =

V_1


ans =

V_2


ans =

V_3

但是,我不知道在将单元格数组插入结构后如何进入这些字段?

编辑:在上面的例子中使用gui变量资源管理器,显示r最终得到结果:

1   2   'V_1'
1   2   'V_2'
1   2   'V_3'

即。它被转换为struct()数组,每个xnames {i}:

的值都有一个
>> r(1)

ans =

    a: 1
    b: 2
    x: 'V_1'

>> r(2)

ans =

    a: 1
    b: 2
    x: 'V_2'

>> r(3)

ans =

    a: 1
    b: 2
    x: 'V_3'

那么,问题不在于如何将这个字段x作为单元格数组访问,而是如何在插入struct()初始化程序时将其保留为单元格数组?

2 个答案:

答案 0 :(得分:5)

根据the documentationstruct函数处理单元格数组的方式与您调用它的方式意味着您将使用V1V2V3

r(1).x
r(2).x
r(3).x

您可以按照David的建议或使用。

来获得您想要的行为
r.x = xnames;

答案 1 :(得分:4)

xnames括在大括号中以将其保留为单元格数组:

r = struct( 'a', a, 'b', b, 'x', {xnames} ) ;