Arrays matlab中结构数组的排序

Arrays matlab中结构数组的排序,arrays,matlab,Arrays,Matlab,我有一个包含两个字段“word”和“number”的结构,需要找到一种方法为具有相同编号的所有元素创建新的结构数组。 strucure阵列的一个示例可以是: a=struct('word',{'meercat','window','lemon','dog','cheese','penguin'},'number',{4,2,2,2,2,1}) 我正在尝试将结构拆分为相同数字的单词的单独数组,例如: a1=struct('word',{'meercat'},'number',{4}) a2=st

我有一个包含两个字段“word”和“number”的结构,需要找到一种方法为具有相同编号的所有元素创建新的结构数组。 strucure阵列的一个示例可以是:

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})

提取数字并使用逻辑索引:

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)
您可以将其自动化:

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')