Fastest way to cycle through a structure for a number
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Will Kinsman
el 1 de Ag. de 2016
Comentada: Stephen23
el 2 de Ag. de 2016
given: a structure and a double
return: the index of a structure that has that number
data:
structure(1).val = 50
structure(2).val = 47
structure(3).val = 22
given: structure, 50
return: 1
given: structure, 22
return: 3
% my attempt
function y = return_struct_index(structure,inputval)
for i = 1:length(structure)
if structure(i).val==inputval
y = i;
return
end
end
y = [];
This is rather slow and comes in at about 2.5 seconds for 1000 iterations for my code. I know for a fact there is a faster way to do this but haven't been able to track it down. Obviously I haven't vectored my function. I have also tried converting the structure to a cell array and then vectoring the solution, but the conversion makes it even slower.
Help greatly appreciated!!
Will
1 comentario
Stephen23
el 2 de Ag. de 2016
If there are non-scalar arrays in the field val:
S(1).val = 50;
S(2).val = 47;
S(3).val = [23,5];
fun = @(n)find(arrayfun(@(s)any(s.val(:)==n),S));
>> fun(22)
ans =
Empty matrix: 1-by-0
>> fun(23)
ans =
3
Respuesta aceptada
James Tursa
el 1 de Ag. de 2016
Editada: James Tursa
el 1 de Ag. de 2016
result = find([structure.val]==value);
E.g.,
>> structure(1).val = 50;
>> structure(2).val = 47;
>> structure(3).val = 22;
>> find([structure.val]==50)
ans =
1
>> find([structure.val]==47)
ans =
2
>> find([structure.val]==22)
ans =
3
>> find([structure.val]==99)
ans =
Empty matrix: 1-by-0
1 comentario
Más respuestas (1)
Azzi Abdelmalek
el 1 de Ag. de 2016
s(1).val = 50
s(2).val = 47
s(3).val = 22
find([s(:).val]==50)
0 comentarios
Ver también
Categorías
Más información sobre Characters and Strings en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!