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: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 ... ]
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 ... ]
    title: 'y = sin(x)'

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

C = {'title','x','y'};
data = orderfields(data,C)
data = struct with fields:
    title: 'y = sin(x)'
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 ... ]
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 ... ]

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

data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
data = struct with fields:
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 ... ]
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 ... ]
    title: 'y = sin(x)'

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

P = [3 1 2];
data = orderfields(data,P)
data = struct with fields:
    title: 'y = sin(x)'
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 ... ]
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 ... ]

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

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: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 ... ]
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 ... ]

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: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 ... ]
        y: [1 0.9980 0.9920 0.9819 0.9679 0.9501 0.9284 0.9029 0.8738 ... ]

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

свернуть все

Введите структуру в виде массива структур.

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

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

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

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

свернуть все

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

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

Советы

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

Расширенные возможности

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