How to sort a structure by numbers in one of its fields?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
First of all, I have used a workaround to label my structure fields as distances as the following:
RX.(['d',num2str(distance{1})])(:,1) = data(:,45); % COTS 1, X-axis
RX.(['d',num2str(distance{1})])(:,2) = data(:,46); % COTS 1, Y-axis
etc.
so that my structure in the end looks like this:
d0: [600000x6 double]
d100: [525000x6 double]
d10: [550000x6 double]
d20: [475000x6 double]
d2: [550000x6 double]
d30: [450000x6 double]
d40: [525000x6 double]
d4: [600000x6 double]
d50: [525000x6 double]
etc.
I would like to be able to sort the fields in the structure so that they'd end up as
d0: [600000x6 double]
d2: [550000x6 double]
d4: [600000x6 double]
d6: [600000x6 double]
d8: [600000x6 double]
d10: [600000x6 double]
d20: [600000x6 double]
etc.
I can get as far as
RXnames = fieldnames(RX);
for j = 1:length(RXnames)
RXd(j) = regexpi(RXnames{j},'d(\d\d*)','tokens');
RXd(j) = RXd{j};
end
RXd = RXd';
which gives me the distances in a string array:
'0'
'100'
'10'
'20'
'2'
'30'
'40'
'4'
'50'
'60'
'6'
'70'
'80'
'8'
'90'
and then I can str2double them to a number array which I can then sort, but then I lose association with the fields. Does anyone know of a way to sort the way I'm describing?
Thanks to anyone in advance!
Scott
0 comentarios
Respuesta aceptada
Andrei Bobrov
el 31 de Oct. de 2012
eg
a = struct('d100',randi(125,4,5),'d458',3,'d7',rand(3),'d0','sd456'); % your data
p1 = regexp(fieldnames(a),'\d*','match');
[i1,i1] = sort(str2double(cat(1,p1{:})));
out = orderfields(a,i1)
Más respuestas (2)
Azzi Abdelmalek
el 31 de Oct. de 2012
Editada: Azzi Abdelmalek
el 31 de Oct. de 2012
s=fieldnames(x)
c=char(s)
s1=cellfun(@(x) (regexp(x,'\d+','match')),s,'un',0)
s2=cellfun(@str2double,s1)
[s3,idx]=sort(s2)
for k=1:numel(s2)
b.(['d' num2str(s3(k))])=x.(strtrim(c(idx(k),:)))
end
x=b
1 comentario
Milos
el 31 de Oct. de 2012
You will have to pad field names with zeros:
d000
d005
d010
d077
d100
and then you can sort the fields using function:
orderfields
0 comentarios
Ver también
Categorías
Más información sobre Structures en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!