我有一个带有两个字段'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})
答案 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>