Пример простой структуры
aStruct.subField = struct('subSubField', {1;2;3;4})
Так что
aStruct.subField(1).subSubField == 1
aStruct.subField(1).subSubField == 2
И т. Д.Тогда значения конечных узлов можно получить через однострочник как
valueLeafs = [aStruct.subField.subSubField];
, который можно проверить с помощью assert(all(valueLeafs == [1,2,3,4]))
.
Пример нескалярной структуры
Вышеупомянутая однострочная строка также работает, когда значения конечных узлов не являются скалярными, так что их можно объединять в горизонтальном направлении.Например,
bStruct.subField = struct('subSubField', {[1,2];[3,4]})
valueLeafs_b = [bStruct.subField.subSubField]; % works okay
cStruct.subField = struct('subSubField', {[1,2];[3;4]})
valueLeafs_c = [cStruct.subField.subSubField]; % error: bad arg dims
Пример структуры отдельного класса
Приведенное ранее однострочное решение не работает, если значения конечных узлов различаются по классам, поскольку они не могут - как правило, объединяться.Однако использование анонимной функции arrayfun
и tricky обычно обеспечивает необходимую технику индексирования:
dStruct.subField = struct('subSubField', {[1;2];'myString'});
valueLeafs_d = arrayfun(@(x) x.subSubField, dStruct.subField, 'UniformOutput', false)