简体   繁体   中英

How do I sort a structure array based on one field in MATLAB?

I previously posted on how to display and access structure array content. The file consisted of states, capitals, and populations. Now I'm having trouble in created a new structure by organizing these states in alphabetical order. I did this by the sortrows function, and I tried pairing up the values of population and the capitals with the alphabetical states, but I can't seem to get it to be an array. I want it to be an array so I can write it to a file. This is what I have so far:

    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

I hope I'm making myself clear.

使用方法对读入的单元格数组进行排序(无需转换),然后使用this写入文件。

With respect to your sorting issue, The function SORT will return as its second output a sort index which can be used to apply the same sort order to other arrays. For example, you could sort your arrays before you create your structure array:

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

Or you could apply your sorting after you create your structure array:

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

However, I'm not sure what you mean when you say "I want it to be an array so I can write to a file."

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM