是否存在不强制字段顺序的Matlab结构变体?

jol*_*olo 7 matlab struct

我想将数据添加到结构数组,而不添加结构的字段必须与原始结构的字段具有相同的顺序.例如:

% Works fine:
students.name = 'John';
students.age = 28;
student2.name = 'Steve';
student2.age = 23;

students(2) = student2;

% Error if the order of the fields of student2 is reversed
students.name = 'John';
students.age = 28;
student2.age = 23;
student2.name = 'Steve';


students(2) = student2; % Error: Dissimilar structs
Run Code Online (Sandbox Code Playgroud)

是否有结构的变体我可以添加数据而不必保持相同的字段顺序?

编辑:一个解决方法是始终使用matlabs"orderfields",它按字母顺序排序字段.也就是说,上述错误的例子将成为:

% Order fields alphabetically
students.name = 'John';
students.age = 28;
student2.age = 23;
student2.name = 'Steve';
students = orderfields(students);
student2 = orderfields(student2);
students(2) = student2; % Works
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是最自然的解决方案.

Lui*_*ndo 4

一个“自然”的解决方案是使用固定的字段顺序初始化(创建)每个结构。以这种方式创建结构后,您可以按任何顺序填充其字段。

另外,您可以将创建封装在一个函数中。这简化了代码并确保顺序一致。在你的情况下,创建者函数可以是

create_student = @(x) struct('name',[], 'age',[]); %// empty fields. Fixed order 
Run Code Online (Sandbox Code Playgroud)

所以你的代码会变成

students = create_student(); %// call struct creator
students.name = 'John';
students.age = 28;
student2 = create_student(); %// call struct creator
student2.age = 23;
student2.name = 'Steve';
students(2) = student2; %// Now this works
Run Code Online (Sandbox Code Playgroud)