2

我想将多个表存储在一个数组中。在下面的代码中,我创建了两个表T1T2. 我想将这些表存储到一个变量MyArray中。

LastName = {'Sanchez';'Johnson';'Li';'Diaz';'Brown'};
Age = [38;43;38;40;49];
Smoker = logical([1;0;1;0;1]);
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];
T1 = table(LastName,Age,Smoker);
T2 = table(Height,Weight,BloodPressure);

% The code below does not work
MyArray(1) = T1;
MyArray(2) = T2;

我知道我可以使用元胞数组,但我想知道是否可以table在 MATLAB 中创建数据类型数组。

4

2 回答 2

1

曾经有一段时间

builtin('subsref',T1,substruct('()',{1}))

(对于任何自定义类T1*)将跳过调用特定于类的重载subsref并改用内置方法。这将等效于T1(1),但忽略为该语法定义的任何类。同样for subsasgn,也就是下标赋值操作T1(2)=T2。这允许创建和使用类的数组。

但是,这似乎不再起作用。也许它与classdef-style 类有关,因为我上次使用上述技巧是在引入这些技巧之前。

我建议您为此使用单元格数组(即使上述方法仍然有效,我也不推荐它)。

* 注意table是自定义类,可以edit table看源码。

于 2018-07-04T05:55:07.033 回答
1

因为table已经实现了()索引,所以我不太清楚您希望如何索引MyArray。你的例子在我看来几乎像MyArray = [T1, T2]

我不确定它是否满足您的需求,但您可以拥有table带有table变量的对象,如下所示:

T = table(T1, T2);

然后,您可以正常使用索引,例如

T.T1.LastName{2}
于 2018-07-04T07:56:50.933 回答