MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

MATLAB

В.Г.Потемкин "Введение в Matlab" (v 5.3)
Глава 6. Массивы записей

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

6.5. Функции для работы с массивами записей

STRUCT
Создать массив записей (структуру)

Синтаксис:

            S = struct('<имя_поля1>',< значение>, '<имя_поля2>',< значение>, ...)

Описание:

Функция S = struct('<имя_поля1>', <значение>, '<имя_поля2>',<значение>, ...) создает массив записей (структуру) с заданными именами и значениями полей.

Пример.
Воспользуемся функцией struct, чтобы создать структуру patient размера 1х1:

           patient = struct('name',' John Doe', 'billing', 127.00,... 'test', [79 75 73; 180 178 177.5; 220 210 205])
            patient =
                  name: ' John Doe' billing: 127
                  test: [3x3 double

Сопутствующие функции: CLASS, CELL, GETFIELD, SETFIELD, RMFIELD, FIELDNAMES.

FIELDNAMES
Получить имена полей

Синтаксис:

               names = fieldnames(S)

Описание:

Функция names = fieldnames(S) возвращает имена полей структуры S в виде строк массива ячеек.

Пример.
Задана следующая структура A размера 1х2:

                A(1).data = [3 4 7; 8 0 1];
                A(1).nest.testnum = 'Test 1';
                A(1).nest.xdata = [4 2 8];
                A(1).nest.ydata = [7 1 6];
                A(2).data = [9 3 2; 7 6 5];
                A(2).nest.testnum = 'Test 2';
                A(2).nest.xdata = [3 4 2];
                A(2).nest.ydata = [5 0 9]

Определим имена ее полей, используя функцию fieldnames:

                  fieldnames(A)
                   ans =
                         'data'
                         'nest'

Сопутствующие функции: GETFIELD, SETFIELD.

GETFIELD
Получить содержимое поля

Синтаксис:

             F = getfield(s, '<имя_поля>')
             F = getfield(S, {i, j}, '<имя_поля>', {k})

Описание:

Функция F = getfield(s, '<имя_поля>'), где элемент структуры или структура s должны иметь размер s, возвращает содержимое указанного поля.

Функция F = getfield(S, {i, j}, '<имя_поля>', {k}) равносильна следующему оператору присваивания F = S(i, j).<имя_поля>(k). Все индексы передаются как массивы ячеек и заключаются в фигурные скобки; имена полей передаются как строки.

Пример.
Задана следующая структура A размера 1х2:

           A(1).data = [3 4 7; 8 0 1];
           A(1).nest.testnum = 'Test 1';
           A(1).nest.xdata = [4 2 8];
           A(1).nest.ydata = [7 1 6];
           A(2).data = [9 3 2; 7 6 5];
           A(2).nest.testnum = 'Test 2';
           A(2).nest.xdata = [3 4 2];
           A(2).nest.ydata = [5 0 9]

Определим содержимое поля A(1).nest:

          getfield(A(1), 'nest')
          ans =
               testnum: 'Test 1'
               xdata: [4 2 8]
               ydata: [7 1 6]

Это также равносильно следующему оператору

         getfield(A, {1}, 'nest')
          ans =
              testnum: 'Test 1'
              xdata: [4 2 8]
              ydata: [7 1 6]

Сравните эти результаты с обращением к оператору A.nest:

         A.nest
          ans =
              testnum: 'Test 1'
              xdata: [4 2 8]
              ydata: [7 1 6]
          ans =
              testnum: 'Test 2'
              xdata: [3 4 2]
              ydata: [5 0 9]

Сопутствующие функции: SETFIELD, FIELDNAMES.

SETFIELD
Установить содержимое поля

Синтаксис:

             s = setfield(s, '<имя_поля>', V)
             s = setfield(S, {i, j}, '<имя_поля>', {k}, V)

Описание:

Функция s = setfield(s, '<имя_поля>', V), где элемент структуры или структура s должны иметь размер 1х1, присваивает указанному полю значение V.

Функция s = setfield(S, {i, j}, '<имя_поля>', {k}, V) равносильна следующему оператору присваивания S(i, j).<имя_поля>(k) = V. Все индексы передаются как массивы ячеек и заключаются в фигурные скобки; имена полей передаются как строки.

Пример.
Задана следующая структура A размера 1х2:

        A(1).data = [3 4 7; 8 0 1];
               A(1).nest.testnum = 'Test 1';
               A(1).nest.xdata = [4 2 8];
               A(1).nest.ydata = [7 1 6];
               A(2).data = [9 3 2; 7 6 5];
               A(2).nest.testnum = 'Test 2';
               A(2).nest.xdata = [3 4 2];
               A(2).nest.ydata = [5 0 9]

Присвоить новое значение полю A(1).nest.xdata:

              A = setfield(A(1), 'nest.xdata', [5 3 9]);
               getfield(A(1), 'nest')

               ans =
                   testnum: 'Test 1'
                   xdata: [5 3 9]
                   ydata: [7 1 6]

Это также равносильно следующему оператору

               A = setfield(A, {1}, 'nest.xdata', [5 3 9]);
               getfield(A, {1}, 'nest.xdata')

               ans =
                   testnum: 'Test 1'
                   xdata: [5 3 9]
                   ydata: [7 1 6]

Сопутствующие функции: GETFIELD, FIELDNAMES.

RMFIELD
Удалить поле

Синтаксис:

              S = rmfield(S, '<имя_поля>')
              S = rmfield(S, F)

Описание:

Функция S = rmfield(S, '<имя_поля>') удаляет указанное поле из структуры.

Функция S = rmfield(S, F), где F - символьный массив имен полей или массив ячеек соответствующих строк, удаляет все указанные поля из структуры. Замечание: Удалить таким способом все поля из структуры нельзя.

Пример.
Задана следующая структура A размера 1х2:

              A(1).data = [3 4 7; 8 0 1];
              A(1).nest.testnum = 'Test 1';
              A(1).nest.xdata = [4 2 8];
              A(1).nest.ydata = [7 1 6];
              A(2).data = [9 3 2; 7 6 5];
              A(2).nest.testnum = 'Test 2';
              A(2).nest.xdata = [3 4 2];
              A(2).nest.ydata = [5 0 9]

Удалить A(1).data:

              B=rmfield(A,'data')
              B =
                  1x2 struct array with fields:
                       nest
             B.nest
              ans =
                  testnum: 'Test 1'
                    xdata: [4 2 8]
                    ydata: [7 1 6]
              ans =
                  testnum: 'Test 2'
                    xdata: [3 4 2]
                    ydata: [5 0 9]

Попытка удалить поле nest приводит к сообщению об ошибке

             B = rmfield(B, 'nest')
                    ??? To RESHAPE the number of elements must not change.
                   Для выполнения функции RESHAPE должно быть изменено количество элементов
                   Error in ==> d:\matlab5\toolbox\matlab\datatypes\rmfield.m
                   On line 43 ==> t = reshape(t,size(s));
                   Ошибка в ==> d:\matlab5\toolbox\matlab\datatypes\rmfield.m
                   В строке 43 ==> t = reshape(t,size(s));

Сопутствующие функции: SETFIELD, GETFIELD, FIELDNAMES, STRVCAT.

ISFIELD
Логическая проверка поля

Синтаксис:

              k = isfield(S, '<имя_поля>')

Описание:

Функция k = isfield(S, '<имя_поля>') возвращает 1 (логическое TRUE), если указанное имя действительно является именем поля данной структуры.

Пример.
Задана следующая структура A размера 1х2:

               A(1).data = [3 4 7; 8 0 1];
               A(1).nest.testnum = 'Test 1';
               A(1).nest.xdata = [4 2 8];
               A(1).nest.ydata = [7 1 6];
               A(2).data = [9 3 2; 7 6 5];
               A(2).nest.testnum = 'Test 2';
               A(2).nest.xdata = [3 4 2];
               A(2).nest.ydata = [5 0 9]

Проверить, является ли поля 'data', 'nest', 'nest.xdata' полями структуры A:

               isfield(A,'data')
               ans =    1
               isfield(A,'nest')
               ans =    1
              isfield(A,'nest.xdata')
               ans =    0

Сопутствующие функции: SETFIELD, GETFIELD, FIELDNAMES.

ISSTRUCT
Логическая проверка структуры

Синтаксис:

               k = isstruct(S)

Описание:

Функция k = isstruct(S) возвращает 1 (логическое TRUE), если указанное имя действительно является именем структуры и 0 - в противном случае.

Пример.
Задана следующая структура A размера 1х2:

               A(1).data = [3 4 7; 8 0 1];
               A(1).nest.testnum = 'Test 1';
               A(1).nest.xdata = [4 2 8];
               A(1).nest.ydata = [7 1 6];
               A(2).data = [9 3 2; 7 6 5];
               A(2).nest.testnum = 'Test 2';
               A(2).nest.xdata = [3 4 2];
               A(2).nest.ydata = [5 0 9]

Проверить, является ли объект A структурой:

              isstruct(A)
               ans = 1

Сопутствующие функции: STRUCT, ISCELL, ISNUMERIC, ISOBJECT.

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

 


Поиск по сайту:

Система Orphus

Яндекс.Метрика