MATLAB:fieldnames的顺序是否已定义?

6

对于相同的输入结构,fieldnames函数是否总是返回相同的单元数组,即使在不同的计算机、不同的操作系统和不同的MATLAB版本上也是如此?或者它是否可能以不同的顺序排列字段名?例如:

myStructure = load myStructure;
x = fieldnames(myStructure);

% days later, diff computer, diff OS, and diff version of MATLAB...
y = fieldnames(myStructure);
x == y %?

fieldnames的文档似乎没有承诺每次返回相同的顺序。但是,orderfields的存在似乎意味着fieldnames会可预测地返回一个基本上不变的顺序。

1个回答

9
我认为结构体字段的顺序是按照创建时的顺序排列的。如果您将结构体保存到 mat 文件中,并在另一个 MATLAB 中打开它,则顺序将保持不变。您可以使用 ORDERFIELDS 函数随时重新排序字段。您可以按许多不同的方式进行排序(按字母顺序排序,使用单元数组、另一个结构体或置换向量),请参阅文档以了解更多详细信息。
顺便说一下,字段顺序不会影响结构比较。
s1 = struct('a',0,'b',1)

s1 = 

    a: 0
    b: 1

s2 = struct('b',1,'a',0)

s2 = 

    b: 1
    a: 0

isequal(s1,s2)

ans = 

     1

s1=orderfields(s1,s2)

s1 = 

    b: 1
    a: 0

更新:

这里是MATLAB文档中关于结构化数据类型“列出结构的字段”小标题下的引用:

字段按照创建顺序出现。

希望这回答了你的问题。


1
请注意,在为结构体数组分配元素时,字段顺序很重要。 - Jonas
谢谢。我只是不想依赖未定义的行为。你知道文档中是否有任何地方说明fieldnames保证按顺序返回字段名吗?也就是说,它在哪里承诺如果我将字段设置为特定顺序,那么我会按照该顺序得到它们? - AlcubierreDrive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接