调用数组中每个类实例的方法



我是Matlab的新手,有人告诉我,在数组上执行相同的操作时,使用点运算符而不是for循环更快。

的例子:

A = 1:200
A = A .* 10;

代替:

A = 1:200
for i = 1:200
    A(i) = A(i) * 10;
end

我已经创建了一个多维对象数组(对象是我创建的类的实例)。是否有可能在所有实例上使用相同的参数调用相同的方法而不使用for循环?

我已经尝试了这3种方法,但他们不工作(A是三维数组):

A(:,:,:).methodName(argument1, argument2);
A.methodName(argument1, argument2);
A..methodName(argument1, argument2);

您应该能够使用'函数形式'调用您的方法

methodName(A, argument1, argument2)

然而,'methodName'将需要处理你已经传递了一个对象数组的事实。下面是一个简单的例子

classdef Eg
    properties
        X
    end
    methods
        function obj = Eg( arg )
            if nargin == 0
                % Default-constructor required
                arg = [];
            end
            obj.X = arg;
        end
        function x = maxX( objs )
        % collect all 'X' values:
            xVals = [objs.X];
            % return the max
            x = max( xVals(:) );
        end
    end
    methods ( Static )
        function testCase()
        % Just a simple test case to show how this is intended to work.
            for ii = 10:-1:1
                myObjArray(ii) = Eg(ii);
            end
            disp( maxX( myObjArray ) );
        end
    end
end

如果可能的话,最好(在MATLAB中)使用更少的对象存储更大的数组,而不是使用大量的小对象。

相关内容

  • 没有找到相关文章

最新更新