Сортировка всех полей в массиве структур на основе одного поля в Matlab - PullRequest
0 голосов
/ 26 июня 2018

Представьте себе, что столбцы f1 и f2 - это одна структура с именем inputStruct, а столбцы f3 и f4 - это другая структура с именем outputStruct (извините за плохое форматирование). Я хочу отсортировать все поля в inputStruct в порядке возрастания inputStruct.f2, чтобы выходные данные были outputStruct (столбцы f3 и f4). Как бы я подошел к этому?

f1_f2 | f3_f4

a__4 | c__1

b__2 | b__2

c__1 | e__3

d__5 | a__4

e__3 | d__5

1 Ответ

0 голосов
/ 26 июня 2018

Используйте sort, чтобы получить outputStruct.f4 и соответствующие индексы. Используйте эти индексы, чтобы переставить inputStruct.f1 и получить outputStruct.f3.

[outputStruct.f4, ind] = sort(inputStruct.f2);
outputStruct.f3 = inputStruct.f1(ind);

или для нескольких полей, просто переберите все поля:

[~, ind] = sort(inputStruct.f2);   %Sorting according to field f2
fns = fieldnames(inputStruct);     %Retrieving the names of all the fields

for k = 1:numel(fns)               %Looping for each field
    outputStruct.(fns{k}) = inputStruct.(fns{k})(ind);
end
%Note: This creates outputStruct with the same fields as that of inputStruct
%but that can be adjusted if needed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...