在matlab中排序结构数组

时间:2014-03-19 14:44:33

标签: arrays matlab

我有一个带有两个字段'word'和'number'的结构,需要找到一种方法来为所有具有相同数字的元素创建新的结构数组。 结构数组的一个例子可能是:

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

1 个答案:

答案 0 :(得分: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)

你可以自动化它:

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。{/ p>