Когда вы получаете доступ к полю структурного массива , он возвращает разделенный запятыми список значений. По умолчанию только первое значение в списке будет присвоено одной переменной. Если вы хотите захватить все эти значения, вы должны собрать их, используя []
(для нормального массива ) или {}
(для массива ячеек ). Поскольку вы имеете дело с наборами данных разного размера в каждой структуре, вам нужно будет использовать массив ячеек:
values = {structExample.b};
Итак, values{1}
будет содержать [1.2,5.33]
, values{2}
будет содержать 1x86 double
и т. Д.
Для случая, когда вы хотите выполнить итерацию по массиву структуры, вы должны проиндексировать элементы и поля массива в правильном порядке. Сначала нужно проиндексировать элемент (который дает вам один элемент структуры из массива), а затем проиндексировать нужное поле:
value = structExample(3).b; % Field b of the third array element
Для дополнительного случая, когда вы хотите собрать поле из индексированного подмножества элементов в массиве вашей структуры, вы должны объединить схемы индексации и сбора сверху. Например:
values = {structExample([structExample.a] == 1).b};
Это соберет все значения полей a
из structExample
в массив, найдет логический индекс , для которого они равны 1
, индексирует массив structExample
с этим логическим массивом, затем собрать значения поля b
из этого подмассива и поместить их в массив ячеек.