Как отсортировать массив структур на основе одного поля в MATLAB? - PullRequest
0 голосов
/ 21 мая 2011

I ранее опубликовано о том, как отобразить и получить доступ к содержимому массива структуры. Файл состоял из штатов, столиц и населения. Теперь у меня возникли проблемы с созданием новой структуры, организовав эти состояния в алфавитном порядке. Я сделал это с помощью функции sortrows, и я попытался соединить значения численности населения и столиц с алфавитными состояниями, но я не могу получить его в виде массива. Я хочу, чтобы это был массив, чтобы я мог записать его в файл. Это то, что я до сих пор:

    fid=fopen('Regions_list.txt')
    file=textscan(fid,'%s %s %f','delimiter',',')
    State=file{1}
    Capital=file{2}
    Population=num2cell(file{3})

sortedStates=sortrows(State)
    n=length(State)

    regions=struct('State',State,...
    'Capital',Capital,...
    'Population',Population)

for k=1:n;
 region=sortedStates(k);
 state_name={regions.State};
 state_reference=strcmpi(state_name,region);
 state_info=regions(state_reference)
end

Надеюсь, я проясню.

Ответы [ 2 ]

0 голосов
/ 23 мая 2011

Что касается вашей проблемы с сортировкой, функция SORT вернет в качестве своего второго вывода индекс сортировки, который можно использовать для применения того же порядка сортировки к другим массивам. Например, вы можете отсортировать массивы до того, как вы создадите структурный массив:

[sortedStates,sortIndex] = sort(State);
regions = struct('State',sortedStates,...
                 'Capital',Capital(sortIndex),...
                 'Population',Population(sortIndex));

Или вы можете применить свою сортировку после , когда вы создаете массив структуры:

regions = struct('State',State,...
                 'Capital',Capital,...
                 'Population',Population);
[~,sortIndex] = sort({regions.State});
regions = regions(sortIndex);

Однако я не уверен, что вы имеете в виду, когда говорите «Я хочу, чтобы это был массив, чтобы я мог записывать в файл».

0 голосов
/ 22 мая 2011

Используйте this для сортировки массива ячеек, считанного (преобразование не требуется), а затем запишите в файл с this .

...