我想使用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()初始化程序时将其保留为单元格数组?
答案 0 :(得分:5)
根据the documentation,struct
函数处理单元格数组的方式与您调用它的方式意味着您将使用V1
,V2
,V3
r(1).x
r(2).x
r(3).x
您可以按照David的建议或使用。
来获得您想要的行为r.x = xnames;
答案 1 :(得分:4)
将xnames
括在大括号中以将其保留为单元格数组:
r = struct( 'a', a, 'b', b, 'x', {xnames} ) ;