在Matlab中,我想創建一個對象數組,使其可以通過其獨特屬性獲取元素,同時保持與正常索引相同的行爲。Matlab:按屬性對象數組索引
下面是類:
classdef myClass < dynamicprops
properties
Name = '';
Values
end
methods
function obj = myClass(name,values)
if nargin > 0
obj.Name = name;
obj.Values = values;
end
end
end
end
讓我們考慮以下的數組:
>> a(1) = myClass('one' ,[1:10]);
>> a(2) = myClass('two' ,[2:20]);
>> a(3) = myClass('three',[3:30]);
直接接取到的元素的值的最簡單方法是:
>> a(1).Values
ans =
1 2 3 4 5 6 7 8 9 10
但我想通過他們的名字而不是他們的索引來調用數組的元素,同時保留abilit Ÿ有直達值:
>> % /!\ This is intended behavior, not real result
>> a('two').Values(end-2:end) * 3
ans =
54 57 60
我可以UNE two = findobj(a,'Name','two'); two.Values(end-2:end) * 3
但它不是爲方便易。
我試着設置一個自定義的subsref
方法到我的對象,它工作得很好,但我失去了一些索引功能。
我用下面的方法預期的行爲:
function out = subsref(obj,S)
if strcmpi(S(1).type,'()') && ischar(S(1).subs{1})
found = findobj(obj,'Name',S(1).subs{1});
if ~numel(found)
error(['Object with Name ''' S(1).subs{1} ''' not found.'])
end
if numel(S) == 1
out = found(1);
else
out = builtin('subsref',found(1),S(2:end));
end
else
out = builtin('subsref',obj,S);
end
end
但我不能[a.Values]
或{a.Name}
獲得的所有名稱/值。 Matlab的回報:
Error using myClass/subsref
Too many output arguments.
而且我可能會失去其他索引功能,以及。
對我的問題有更好的解決方案嗎? 任何幫助,將不勝感激。