Значения полей массива итерационных структур

Как перебрать / зациклить структуры полей массива значений.

Для структуры 1x1

student = struct();
student.name = 'jim';
student.gpa  = 1.9;

Я сделаю это:

fields = fieldnames(student)

for i=1:numel(fields)
  var =  fields(i)
end

Но я не знаю, как повторить 1 х 2:

student = struct();
student(1).name = 'jim';
student(1).gpa  = 1.9;

student(2).name = 'ryan';
student(2).gpa  = 1.5;

1 ответ

Решение

Вам нужен другой for петля

fields = fieldnames(student);

for k = 1:numel(student)
    for m = 1:numel(fields)
        var = student(k).(fields{m});
    end
end

Кроме того, вы можете использовать тот факт, что точечная нотация создаст список, разделенный запятыми, и вы можете поместить их либо в массив ячеек (для строк), либо в обычный массив

names = {student.name};
gpas = [student.name];

Я обычно предпочитаю использовать второй подход чаще всего для доступа к тому же полю из массива структуры.

Другие вопросы по тегам