I've the following struct
test = struct(...
'a',false,...
'b',false,...
'c',false,...
'd',false,...
'e',false,...
'f',false,...
'g',true...
);
How do get the field name that has a value true ?
Expected result:
g
Any suggestions?

 Akzeptierte Antwort

Walter Roberson
Walter Roberson am 29 Jan. 2020

0 Stimmen

F = fieldnames(test) ;
F(cell2mat(struct2cell(test)))

Weitere Antworten (1)

Stephen23
Stephen23 am 23 Dez. 2022

1 Stimme

test = struct(...
'a',false,...
'b',false,...
'c',false,...
'd',false,...
'e',false,...
'f',false,...
'g',true...
);
F = fieldnames(test);
R = F{structfun(@(a)a,test)}
R = 'g'

1 Kommentar

Timing tests:
test = struct(...
'a',false,...
'b',false,...
'c',false,...
'd',false,...
'e',false,...
'f',false,...
'g',true...
);
timeit(@()f1(test))
ans = 6.6802e-05
timeit(@()f2(test))
ans = 2.1892e-05
function f1(test)
F = fieldnames(test);
R = F(cell2mat(struct2cell(test)));
end
function f2(test)
F = fieldnames(test);
R = F{structfun(@(a)a,test)};
end

Melden Sie sich an, um zu kommentieren.

Kategorien

Produkte

Version

R2019b

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by