MATLAB: определен ли порядок имен полей? - PullRequest
5 голосов
/ 25 февраля 2011

При одинаковой структуре ввода будут ли имена полей всегда возвращать один и тот же массив ячеек, даже на разных компьютерах, в разных ОС и в разных версиях MATLAB?Или это может по-другому заказать имена полей?Например:

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

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

Документация для имен полей не обещает, что каждый раз возвращается один и тот же заказ.Но с другой стороны, существование полей порядка , по-видимому, подразумевает, что имена полей предсказуемо возвращают базовый, обычно неизменный порядок.

1 Ответ

8 голосов
/ 25 февраля 2011

Я считаю, что поля структуры упорядочены по мере их создания.Если вы сохраните структуру в 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 для типа данных структуры в разделе «Вывод списка полей структуры»"subtitle:

Поля отображаются в том порядке, в котором они были созданы.

Надеюсь, что это ответ на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...