Как отсортировать массивы структур в MATLAB?

Вот хорошее сообщение в блоге, это было просто отправлено Fabrice (автор LINQ в Действии), который покрывает материал в вопросе, который я задал. Я помещаю его здесь для ссылки, поскольку читатели вопроса найдут это полезным.

Преобразование LINQ запрашивает от синтаксиса запроса до метода/синтаксиса оператора

10
задан gnovice 30 March 2017 в 03:09
поделиться

2 ответа

Вот один из примеров того, как вы могли бы это сделать, используя функцию MAX вместо необходимости сортировки:

%# First, create a sample structure array:

s = struct('value',{1 7 4},'file',{'img1.jpg' 'img2.jpg' 'img3.jpg'});

%# Next concatenate the "value" fields and find the index of the maximum value:

[maxValue,index] = max([s.value]);

%# Finally, get the file corresponding to the maximum value:

maxFile = s(index).file;

EDIT: Если вы хотите получить N высших значений, а не только максимальное, вы можете использовать SORT вместо MAX (, как предложил Шака ). Например (используя приведенную выше структуру):

>> N = 2;  %# Get two highest values
>> [values,index] = sort([s.value],'descend');  %# Sort all values, largest first
>> topNFiles = {s(index(1:N)).file}  %# Get N files with the largest values

topNFiles = 

    'img2.jpg'    'img3.jpg'
12
ответ дан 3 December 2019 в 15:52
поделиться

Также можно отсортировать всю структуру.

Чтобы построить на основе примера gnovice ...

% Create a structure array
s = struct('value',{1 7 4},'file',{'img1.jpg' 'img2.jpg' 'img3.jpg'});

% Sort the structure according to values in descending order
% We are only interested in the second output from the sort command

[blah, order] = sort([s(:).value],'descend');

% Save the sorted output

sortedStruct = s(order);
15
ответ дан 3 December 2019 в 15:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: