# Sorting a string according to the values of a vector of type double

2 views (last 30 days)
L'O.G. on 9 Dec 2022
Answered: Les Beckham on 9 Dec 2022
I have a vector A with numbers of type double. Two of the values of A are the same, e.g.,
A = [1.1 2.3 4.4 2.3 5.1];
I also have a corresponding string, e.g.,
vegetables = {'carrots' 'lettuce' 'cabbage' 'parsley' 'tomatoes'};
I want to order A in increasing values and re-arrange the string accordingly. If a value appears more than once, as is the case here, how do I make sure it's still counted? So here in this simple example I should end up with:
A = [1.1 2.3 2.3 4.4 5.1];
vegatables={'carrots' 'lettuce' 'parsley' 'cabbage' 'tomatoes'};
I tried to do this by
[~,idx] = ismember(sort(A),A);
vegatables_ordered = vegetables(idx);
A_ordered = sort(A);
But that doesn't get the string right. How do I do this? There won't be duplicate values in all cases, but I want to account for this possibility shown here.

Les Beckham on 9 Dec 2022
It should be as simple as this unless I misunderstand what you are expecting.
A = [1.1 2.3 4.4 2.3 5.1];
vegetables = {'carrots' 'lettuce' 'parsley' 'cabbage' 'tomatoes'};
[As,idx] = sort(A)
As = 1×5
1.1000 2.3000 2.3000 4.4000 5.1000
idx = 1×5
1 2 4 3 5
vegetables(idx)
ans = 1×5 cell array
{'carrots'} {'lettuce'} {'cabbage'} {'parsley'} {'tomatoes'}

Steven Lord on 9 Dec 2022
Take a look at the second output from the sort function.

### Categories

Find more on Characters and Strings in Help Center and File Exchange

R2021b

### Community Treasure Hunt

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

Start Hunting!