MATLAB Answers

sort a string based on particular value

2 views (last 30 days)
Sajid Afaque
Sajid Afaque on 19 Mar 2020
Edited: Sriram Tadavarty on 19 Mar 2020
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

  0 Comments

Sign in to comment.

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

Sign in to comment.

Tags

Products


Release

R2013b