在MATLAB中按属性对对象数组进行排序?

时间:2014-07-30 21:50:00

标签: arrays matlab sorting object

我有一个对象数组,每个对象都有各种属性,我想弄清楚如何运行" sort"在数组上,指定要排序的每个对象的特定属性。

例如,假设我的物品是"椅子"我想按照numlegs(腿数)的属性进行排序,然后我就可以在一组椅子上运行一个排序函数,它会按照他们喜欢的腿数对它们进行排序"排序(椅子,numlegs)&#34 ;.有没有办法做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:4)

排序对象数组

  • 定义一个类

_

classdef SimpleClass
    properties
        id
        numlegs
    end
    methods
        function obj = SimpleClass(id,numlegs)
            if nargin > 0
                obj.id = id;
                obj.numlegs = numlegs;
            end
        end
    end
end
  • 排序

_

chairs = SimpleClass.empty(20,0);
for ii = 1:20
    chairs(ii) = SimpleClass(ii, randi(4,1));
end
[~, ind] = sort([chairs.numlegs]);
chairs_sorted = chairs(ind);

输出

_

>> [chairs_sorted.numlegs]

ans =

  Columns 1 through 10

     1     1     1     1     1     1     1     1     2     3

  Columns 11 through 20

     3     3     3     3     3     3     3     4     4     4

>> [chairs_sorted.id]

ans =

  Columns 1 through 10

     3     5     8     9    10    11    17    19    12     1

  Columns 11 through 20

     2     4     6     7    14    15    20    13    16    18

排序结构数组

chairs = struct('id',num2cell(1:20), 'numlegs',num2cell(randi(4, 1, 20)));
[~, ind] = sort([chairs.numlegs]);
chairs_sorted = chairs(ind);