我的印象是人们可以使用变量名访问表中的变量,其方式与访问标量Struct中的向量字段的方式相同。这并非总是如此。在下面的示例中,我使用向量字段构建了一个小的虚拟标量结构y
,然后使用相应的列名建立了相应的表x
。
% Build up scalar struct `y` with vector fields
>> y.a=1
y = a: 1
>> y.a(2)=2
y = a: [1 2]
>> y.b(1:2)=(1:2)'
y = a: [1 2]
b: [1 2]
% Build up table `x` with corresponding fields (variables)
>> x=table
x = empty 0-by-0 table
>> x.a=1
x = a
_
1
>> x.a(2)=2
x = a
______
1 2
>> x.b(1:2)=(1:2)'
Warning: The assignment added rows to the table, but did not
assign values to all of the table's existing variables. Those
variables have been extended with rows containing default
values.
> In table/subsasgnDot (line 285)
In table/subsasgn (line 67)
x = a b
______ _
1 2 1
0 0 2
% Compare outputs
>> x.a(2)
ans = 0
>> y.a(2)
ans = 2
问题似乎是x.a
没有必须将变量a
的行映射到x.a
的元素。如果在块中构建x.a,并且第一个块只包含一个元素(参见上面的a
),则可以创建病态变量x.a=1
。
人们会把桌子堆积起来,但对我来说,当速度无关紧要时,我更看重简化代码。
是否有一种简单的方法或代码习惯用法可以让我使用表和使用带有向量字段的标量数组的语法?
如果没有这个,我就不会重新调整我的代码以返回带有向量字段的标量数组,然后转换为表进行表操作。我试图通过直接从表开始来提高效率(在编码方面)。
一种非理想的解决方法是使用x.a(2,1)=2
而不是x.a(2)=2
,但我的目标是减少和简化代码,而不是让代码更嘈杂。
在使用与向量字段的结构相同的语法访问数据的过程中,是否有一种方法可以在构建表时不仅可以逐个构建表,而且可以在一个又一个字段之后构建表,从而抑制上述警告? /强>