How do I find all entries in an object array with a certain property
13 次查看(过去 30 天)
显示 更早的评论
Hi all, this is my first time attempting an object orientated program in Matlab so please bear with me. I have created an object array that for each object in the array has the properties 'Position' and 'Value'. Position saves the position within the array and Value will be either 0 or 1. I would like to be able to find the position of all entries with a 1 as the value. In a normal array I would have used the 'find' command. I have tried using 'findobj' but this results in an error saying I cannot use the method findobj on a class handle. Is there another way I can do this? My code atm is
classdef ObjectArray
properties
Value
Position
Timer
NbH1
NbH2
end
methods
function Cell = ObjectArray(M)
if nargin ~= 0
m = size(M,1);
n = size(M,2);
Cell(m,n) = ObjectArray;
for i = 1:m
for j = 1:n
Cell(i,j).Value = M(i,j);
Cell(i,j).Position=[i,j];
end
end
end
end
end
end
Thanks for the help, Carla
0 个评论
回答(2 个)
Benjamin Kraus
2018-2-13
arr = ObjectArray(rand(10)>0.5);
ind = arrayfun(@(o) o.Value == 1, arr);
pos = vertcat(arr(ind).Position);
1 个评论
Benjamin Kraus
2018-2-13
Another option is to overload find for your class, and internally call arrayfun (or any other internal implementation you want):
classdef ObjectArray
...
methods
function ind = find(objarr)
ind = arrayfun(@(o) o.Value == 1, objarr);
end
end
end
per isakson
2020-1-17
编辑:per isakson
2020-1-17
Another approach
>> cc = ClassC( 12 );
>> [cc.a]
ans =
17 17 17 17 17 17 17 17 17 17 17 17
>> [cc([4,7,11]).a] = deal(1);
>> [cc.a]
ans =
17 17 17 1 17 17 1 17 17 17 1 17
This was a matlabish way to create a sample object array. Now find() finds the ones this way
>> find([cc.a]==1)
ans =
4 7 11
>>
where
classdef ClassC < handle
properties
a double = 17;
end
methods
function this = ClassC( n )
if nargin >= 1
this( 1, n ) = ClassC();
end
end
end
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Graphics Object Programming 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!