2014-03-19 95 views
1

我有一个包含两个字段'word'和'number'的结构,需要找到一种方法为所有具有相同编号的元素创建新的结构数组。 一个所述strucure阵列的例子可以是:在matlab中对结构数组进行排序

a=struct('word',{'meercat','window','lemon','dog','cheese','penguin'},'number',{4,2,2,2,2,1}) 

我试图分裂结构分成单独的阵列对于相同数目的词语,例如:

a1=struct('word',{'meercat'},'number',{4}) 
a2=struct('word',{'window','lemon','dog','cheese'},'number',{2,2,2,2}) 
a2=struct('word',{'penguin'},'number',{1}) 

回答

2

提取号码和使用逻辑索引:

a = struct('word' , {'meercat','window','lemon','dog','cheese','penguin'}, ... 
      'number', {4,2,2,2,2,1}) 

% extract numbers 
num = [a(:).number] 

% indexing 
a1 = a(num == 4) 
a2 = a(num == 2) 
a3 = a(num == 1) 

你可以的Automize它:

sortedStructs = arrayfun(@(x) a(num == x), unique(num),'uni',0) 

它返回一个单元阵列与一个结构为每个编号:

sortedStructs{1} = 

     word: 'penguin' 
    number: 1 

sortedStructs{2} = 

1x4 struct array with fields: 

    word    
    number 

sortedStructs{3} = 

     word: 'meercat' 
    number: 4 

'stable'属性添加到unique,如果你想保持原来的顺序:unique(num,'stable')