Info

This question is closed. Reopen it to edit or answer.

sort a string based on particular value

1 view (last 30 days)
Sajid Afaque
Sajid Afaque on 19 Mar 2020
Closed: MATLAB Answer Bot on 20 Aug 2021
Hello All,
i have a list of type
ch = { 'temp_25_vgs_8', 'temp_25_vgs_3', 'temp_25_vgs_9', 'temp_25_vgs_10', 'temp_20_vgs_8', 'temp_20_vgs_5', 'temp_25_vgs_5'};
i need to sort it based on vgs value (or both vgs and temp) and get back the list as
ch = { 'temp_20_vgs_5',
'temp_20_vgs_8',
'temp_25_vgs_3',
'temp_25_vgs_5',
'temp_25_vgs_8',
'temp_25_vgs_9',
'temp_25_vgs_10'
} ;
please help me resolve that,
than you in advance

Answers (1)

Sriram Tadavarty
Sriram Tadavarty on 19 Mar 2020
Edited: Sriram Tadavarty on 19 Mar 2020
Hi Sajid,
The sort function with the arrayfun can be used to check this.
chs = arrayfun(@(x) str2double(string([ch{x}(5+1:8-1) ch{x}(13:end)])),1:numel(ch))
[~,i] = sort(chs);
out = ch(i);
Hope this helps.
Regards,
Sriram
  2 Comments
Sajid Afaque
Sajid Afaque on 19 Mar 2020
Hello Sriram,
it is only taking temp into consideration.
i need it to get sort based on vgs value also
K
K>> sort(ch)'
ans =
'temp_20_vgs_5'
'temp_20_vgs_8'
'temp_25_vgs_10'
'temp_25_vgs_3'
'temp_25_vgs_5'
'temp_25_vgs_8'
'temp_25_vgs_9'
Sriram Tadavarty
Sriram Tadavarty on 19 Mar 2020
Hi Sajid,
Here is what you are looking for, if you know what the index locations are already, then you perform something as such:
chs = arrayfun(@(x) str2double(string([ch{x}(5+1:8-1) ch{x}(13:end)])),1:numel(ch))
[~,i] = sort(chs);
out = ch(i);
To find the locations exactly which has the starting numbers, you can use this
ind = regexp(ch,'_'); % it provides index in each cell
Let me know if this helped.
Thanking you.
Regards,
Sriram

Tags

Products


Release

R2013b

Community Treasure Hunt

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

Start Hunting!