Как использовать find с вложенной структурой в Matlab

У меня есть массив вложенной структуры. например

st(1).a.b.c=1
st(2).a.b.c=2
st(3).a.b.c=3

...и так далее

Если я хотел найти индексный номер объектов.c, содержащих номер 3, я пробую следующую функцию

find([st.a.b.c]==3)

Это дает эту ошибку:

Ожидается один вывод из выражения индексации с фигурными скобками или точками, но было 3 результата.

Может ли кто-нибудь помочь мне решить эту проблему?

1 ответ

Как вы, возможно, поняли, обработка многоуровневой индексации в структурах немного сбивает с толку. Тем не менее, может оказаться полезным:

st(1).a.b.c=1;
st(2).a.b.c=2;
st(3).a.b.c=3;

checkLoop = 1;
while checkLoop
    if isstruct(st)
        fieldNm = fieldnames(st); % In case you have single field in each level
        st = [st(:).(fieldNm{1})];
    else
        checkLoop = 0;
    end
end

where3 = find(st == 3);
Другие вопросы по тегам