orderfields

Закажите поля массива структур

Синтаксис

S = orderfields(S1)
S = orderfields(S1,S2)
S = orderfields(S1,C)
S = orderfields(S1,P)
[S,Pout] = orderfields(___)

Описание

пример

S = orderfields(S1) заказывает поля в S1 по наименованию.

Поскольку имена полей могут содержать только буквы, цифры и символы нижнего подчеркивания, этот синтаксис имена полей видов в порядке ASCII. Все прописные письма приходят перед всеми строчными буквами.

пример

S = orderfields(S1,S2) возвращает копию S1 с ее полями, переупорядоченными, чтобы совпадать с порядком полей S2. Входные массивы структур S1 и S2 должны иметь те же имена полей.

пример

S = orderfields(S1,C) совпадает с порядком имен, заданных во входном массиве C. Имя каждого поля в S1 должно появиться однажды в C.

пример

S = orderfields(S1,P) совпадает с порядком, заданным вектором перестановки P.

Если S1 имеет поля n, то элементы P являются целыми числами от 1 до n, расположенного в любом порядке. Например, если S1 имеет три поля, и P является [3 1 2], то третье поле S1 является первым полем вывода S. Этот синтаксис полезен для упорядоченного расположения нескольких массивов структур таким же образом.

пример

[S,Pout] = orderfields(___) также возвращает вектор перестановки. Элементы Pout являются целыми числами от 1 до n, расположенного в порядке, который представляет изменение в порядке полей. Можно использовать этот синтаксис с любым из входных параметров предыдущих синтаксисов.

Примеры

свернуть все

Создайте структуру с несколькими полями.

S1 = struct('b',1,'B',2,'a',3,'A',4)
S1 = struct with fields:
    b: 1
    B: 2
    a: 3
    A: 4

Закажите поля. Этот синтаксис заказывает поля их именами в порядке ASCII.

S = orderfields(S1)
S = struct with fields:
    A: 4
    B: 2
    a: 3
    b: 1

Создайте две структуры, которые имеют те же поля в различных порядках. Имена полей являются тем же самым, но значения полей отличаются.

S1 = struct('b',1,'B',2,'a',3,'A',4)
S1 = struct with fields:
    b: 1
    B: 2
    a: 3
    A: 4

S2 = struct('a',0,'b',20,'B',10,'A',0)
S2 = struct with fields:
    a: 0
    b: 20
    B: 10
    A: 0

Прикажите, чтобы поля в S1 совпадали с порядком полей в S2.

S = orderfields(S1,S2)
S = struct with fields:
    a: 3
    b: 1
    B: 2
    A: 4

Создайте структуру.

data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
data = struct with fields:
        x: [1x100 double]
        y: [1x100 double]
    title: 'y = sin(x)'

Закажите поля путем листинга их имен в массиве ячеек.

C = {'title','x','y'};
data = orderfields(data,C)
data = struct with fields:
    title: 'y = sin(x)'
        x: [1x100 double]
        y: [1x100 double]

Создайте структуру.

data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
data = struct with fields:
        x: [1x100 double]
        y: [1x100 double]
    title: 'y = sin(x)'

Закажите поля путем листинга их исходных положений в различном порядке. Например, переместите третье поле так, чтобы это было первое поле выходной структуры.

P = [3 1 2];
data = orderfields(data,P)
data = struct with fields:
    title: 'y = sin(x)'
        x: [1x100 double]
        y: [1x100 double]

Создайте структуру.

data1.x = linspace(0,2*pi);
data1.y = sin(data1.x);
data1.title = 'y = sin(x)';

Переупорядочьте структуру с помощью функции orderfields. Сохраните новый полевой порядок в векторе перестановки Pout.

[S,Pout] = orderfields(data1,{'title','x','y'})
S = struct with fields:
    title: 'y = sin(x)'
        x: [1x100 double]
        y: [1x100 double]

Pout = 3×1

     3
     1
     2

Создайте вторую структуру с теми же полями.

data2.x = data1.x;
data2.y = cos(data2.x);
data2.title = 'y = cos(x)';

Переупорядочьте поля data2 с помощью Pout. Если у вас есть много структур с теми же именами полей, то можно использовать Выпячивание, чтобы переупорядочить их всех таким же образом.

S2 = orderfields(data2,Pout)
S2 = struct with fields:
    title: 'y = cos(x)'
        x: [1x100 double]
        y: [1x100 double]

Входные параметры

свернуть все

Введите структуру, заданную как массив структур.

Полевой порядок структурой, заданной как массив структур. S2 имеет те же поля как S1, но задает их в различном порядке.

Полевой порядок по наименованию, заданный как массив ячеек из символьных векторов или массив строк. Имена в C должны совпадать с именами полей S1.

Полевой порядок номером, заданным как числовой вектор. Числа должны быть целыми числами от 1 до n, где n является количеством полей S1.

Выходные аргументы

свернуть все

Переупорядоченная структура, возвращенная как массив структур. S имеет те же поля как S1, но они могут быть в различном порядке.

Выведите полевой порядок, возвращенный как числовой вектор. Элементы Pout являются целыми числами от 1 до n, где n является количеством полей S1. Перестановка целых чисел представляет изменение в порядке полей.

Советы

  • Функция orderfields только заказывает поля верхнего уровня. Это не рекурсивно.

Представлено до R2006a