How do I make a function provide a ordered list?

3 vues (au cours des 30 derniers jours)
James Metz
James Metz le 5 Avr 2020
Modifié(e) : James Metz le 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 commentaires
Rik
Rik le 8 Avr 2020
It is not just your own question. You posted it on a public forum, asking others for help. People spent time helping you. The least you can do is to leave your question as it was so others with a similar question can benefit from the solution as well.
Rena Berman
Rena Berman le 14 Mai 2020
(Answers Dev) Restored edit

Connectez-vous pour commenter.

Réponse acceptée

Ameer Hamza
Ameer Hamza le 5 Avr 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 commentaires
Ameer Hamza
Ameer Hamza le 5 Avr 2020
James, the function is correct. You need to call it like this so that the output value is stored in a variable
sortedStruct = movies_by_cou(movies)
Ameer Hamza
Ameer Hamza le 6 Avr 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

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Structures dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by