MATLAB Answers

How do I make a function provide a ordered list?

2 views (last 30 days)
James Metz
James Metz on 5 Apr 2020
Edited: James Metz on 25 Nov 2020
I need to create a function that outputs and ordered list based on the length of the input.
The input is a struct with field name countries that contains a char vector with the abbreviations of particular countries.
i.e. struct(1).countries = 'US GB CZ'
I am using a for loop to go through each struct and countries field to determine which one has the largest amount of countries. I used the strlength() fxn to compare the lengths of the "countries" vectors, but now I need a way to ouput it in an ordered list.
I did something along the lines of
function out_out = in(struct)
for ii = 1:length(struct)
if strlength(struct(ii).countries) >= strlength(struct(ii-1).countries)
out = [struct(ii).title out]
end
end
out_out = out(:)
end
How can I compile all inputs into one big output list with the struct with the most countries at the top and the struct with the fewest at the bottom. Some structs may have equal number of countries. I do not want to lose any of the structs, just re-order them based on how many countries are in them.
  4 Comments

Sign in to comment.

Accepted Answer

Ameer Hamza
Ameer Hamza on 5 Apr 2020
No need to use a for loop.
myStruct(1).countries = 'ABCDEF';
myStruct(2).countries = 'ABCDEFGHI';
myStruct(3).countries = 'ABCDEFG';
myStruct(4).countries = 'ABCD';
[~,idx] = sort(strlength({myStruct.countries}), 'descend');
sortedStruct = myStruct(idx);
Result:
>> sortedStruct.countries
ans =
'ABCDEFGHI'
ans =
'ABCDEFG'
ans =
'ABCDEF'
ans =
'ABCD'
  2 Comments
Ameer Hamza
Ameer Hamza on 6 Apr 2020
James, I think you have added that line inside the function. Let me clearify a bit.
You need to create a file movies_by_cou.m and save it in current folder. Then paste the following code in that file
function sortedStruct = movies_by_cou(movies)
[~, idx] = sort(strlength({movies.countries}), 'descend');
sortedStruct = movies(idx);
end
And then on command window run
sortedStruct = movies_by_cou(movies);
and then check the content of sortedStruct

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by