getfield

Поле массива структур

Синтаксис

value = getfield(S,field)
value = getfield(S,field1,...,fieldN)
value = getfield(S,idx,field1,...,fieldN)
value = getfield(S,idx,field1,idx1,...,fieldN,idxN)

Описание

пример

value = getfield(S,field) возвращает значение в заданном поле структуры S. Например, если S.a = 1, то getfield(S,'a') возвращает 1.

Как альтернатива getfield, используйте запись через точку, value = S.field. Запись через точку обычно более эффективна.

Если S является нескалярным, то getfield возвращает значение в первом элементе массива, эквивалентного S(1).field.

пример

value = getfield(S,field1,...,fieldN) возвращает значение, сохраненное во вложенной структуре. Например, если S.a.b.c = 1, то getfield(S,'a','b','c') возвращает 1.

пример

value = getfield(S,idx,field1,...,fieldN) указывает элемент массива структур. Например, если S(3,4).a = 1, то getfield(S,{3,4},'a') возвращает 1.

пример

value = getfield(S,idx,field1,idx1,...,fieldN,idxN) указывает элементы полей. Например, если S.a(2) = 1, то getfield(S,'a',{2}) возвращает 1. Точно так же, если S(3,4).a(2).b = 1, то getfield(S,{3,4},'a',{2},'b') возвращает 1.

Примеры

свернуть все

Получите значение поля от структуры, возвращенной функцией what. what возвращает скалярную структуру с полями, содержащими путь к заданной папке и именам различных видов файлов в папке.

S = what('C:\Temp')
S = struct with fields:
        path: 'C:\Temp'
           m: {'testFunc1.m'}
       mlapp: {0×1 cell}
         mlx: {'testFunc2.mlx'}
         mat: {2×1 cell}
         mex: {0×1 cell}
         mdl: {0×1 cell}
         slx: {0×1 cell}
           p: {0×1 cell}
     classes: {0×1 cell}
    packages: {0×1 cell}

Возвратите имена всех Live скриптов, перечисленных в поле mlx. Когда вы используете функцию getfield, можно получить доступ к полю структуры, возвращенной функцией, не используя временную переменную, чтобы содержать ту структуру.

value = getfield(what('C:\Temp'),'mlx')
value = 1×1 cell array
    {'testFunc2.mlx'}

Также можно получить доступ к полю с помощью записи через точку.

value = S.mlx
value = 1×1 cell array
    {'testFunc2.mlx'}

Доступ к полю вложенной структуры. Во вложенной структуре структура на любом уровне может иметь поля, которые являются структурами и другими полями, которые не являются структурами.

Во-первых, создайте вложенную структуру.

S.a.b.c = 1;
S.a.b.d = 'two';
S.a.b.e = struct('f',[3 4],'g','five');
S.h = 50
S = struct with fields:
    a: [1x1 struct]
    h: 50

В то время как S является структурой, полями S.a, S.a.b, и S.a.b.e является также структурами.

S.a
ans = struct with fields:
    b: [1x1 struct]

S.a.b
ans = struct with fields:
    c: 1
    d: 'two'
    e: [1x1 struct]

S.a.b.e
ans = struct with fields:
    f: [3 4]
    g: 'five'

Возвратите значение S.a.b.d с помощью функции getfield. Когда вы задаете список, разделенный запятыми вложенных имен структуры, необходимо включать структуры в каждый уровень между структурой наверху и именем поля, которое вы задаете. В этом случае списком, разделенным запятыми имен структуры является 'a','b', и именем поля является 'd'.

value = getfield(S,'a','b','d')
value = 
'two'

Также можно использовать запись через точку, чтобы получить доступ к тому же полю.

value = S.a.b.d
value = 
'two'

Получите значение поля от элемента массива структур, возвращенного функцией dir. dir возвращает массив структур, элементы которого каждый содержит информацию о файле в заданной папке.

Возвратите информацию о файлах в папке C:\Temp. В папке существует 5 файлов.

S = dir('C:\Temp')
S = 5×1 struct array with fields:
    name
    folder
    date
    bytes
    isdir
    datenum

Чтобы отобразить информацию о 5-м файле, индексируйте в S.

S(5)
ans = struct with fields:
       name: 'testFunc2.mlx'
     folder: 'C:\Temp'
       date: '19-Jul-2018 09:43:53'
      bytes: 2385
      isdir: 0
    datenum: 7.3726e+05

Возвратите имя файла, описанного 5-м элементом S с помощью функции getfield. Когда вы используете getfield, задаете индексы в массиве ячеек.

value = getfield(S,{5},'name')
value = 
'testFunc2.mlx'

Как альтернатива, индекс в массив структур, и затем используют запись через точку, чтобы задать поле.

value = S(5).name
value = 
'testFunc2.mlx'

Доступ к полю вложенной структуры, в которой структуры на некоторых уровнях являются массивами структур. В этом примере S 1 2 массив структур. Второй элемент, S(2), имеет вложенную структуру a.b, где b 1 3 массив структур.

Во-первых, создайте вложенную структуру. После создания структуры с помощью записи через точку создайте другой нескалярный массив структур с помощью struct, функционируют и добавляют его как поле.

S.a = 1;
S(2).a.b = struct('d',{5,10,20});
S
S = 1x2 struct array with fields:
    a

S(2).a.b
ans = 1x3 struct array with fields:
    d

Возвратите значение d от третьего элемента b с помощью функции getfield. Необходимо задать индексы и S и b с помощью массивов ячеек.

value = getfield(S,{2},'a','b',{3},'d')
value = 20

Также можно использовать запись через точку, чтобы получить доступ к тому же полю.

value = S(2).a.b(3).d
value = 20

Создайте структуру с полем, значение которого является массивом.

S.a = [5 10 15 20 25]
S = struct with fields:
    a: [5 10 15 20 25]

Возвратите элементы массива с помощью функции getfield. Чтобы возвратить подмассив, задайте индексы после имени поля. Необходимо задать индексы в массиве ячеек.

value = getfield(S,'a',{[2:4]})
value = 1×3

    10    15    20

Также можно использовать запись через точку и индексацию массива, чтобы получить доступ к тем же элементам.

value = S.a(2:4)
value = 1×3

    10    15    20

Входные параметры

свернуть все

Массив структур. Если S является нескалярным, то каждый элемент S является структурой, и все элементы имеют те же поля с теми же именами.

Имя поля, заданное как вектор символов или скаляр строки.

Индексы, заданные как массив ячеек числовых или логических значений. Индексы для S и полей 1 через N-1 указывают элементы массивов структур. Индексы для поля N указывают элементы массива в том поле, которое может иметь любой тип.

Пример: getfield(S,{1,2},'a') эквивалентен S(1,2).a.

Пример: Если S.a = [5 10 20], то getfield(S,'a',{[2,3]}) возвращает [10 20].

Представлено до R2006a