Spec-Zone.ru › Octave 9

6.1.4 Работа со структурами

Ниже приведены другие функции, позволяющие работать с полями структуры.

: n = numfields (s)

Возвращает количество полей структуры s.

См. также: fieldnames.

: names = fieldnames (struct)
: names = fieldnames (obj)
: names = fieldnames (javaobj)
: names = fieldnames ("javaclassname")

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

Если входной аргумент — структура struct, то names — это элементы структуры.

Если входной аргумент — объект Octave obj, то names — это открытые свойства объекта.

Если входной аргумент — объект Java javaobj или строка с именем класса Java javaclassname, то names — это открытые поля (члены данных) объекта или класса.

См. также: numfields, isfield, orderfields, struct, properties.

: tf = isfield (x, "name")
: tf = isfield (x, name)

Возвращает true, если x является структурой и содержит элемент с именем name.

Если name — массив ячеек со строками, возвращается логический массив того же размера.

См. также: fieldnames.

: sout = setfield (s, field, val)
: sout = setfield (s, sidx1, field1, fidx1, sidx2, field2, fidx2, …, val)

Возвращает копию структуры s, в которой полю field присвоено значение val.

Например:

s = struct ();
s = setfield (s, "foo bar", 42);

Это эквивалентно следующему:

s.("foo bar") = 42;

Обратите внимание, что здесь нельзя использовать обычный синтаксис структуры s.foo bar = 42, поскольку имя поля не является допустимым идентификатором Octave из-за пробела. Использование произвольных строк в качестве имен полей несовместимо с MATLAB, и при включенном предупреждении с идентификатором Octave:language-extension будет выдано предупреждение. См. warning_ids.

Во второй форме вызова задается поле элемента массива структур. Входной аргумент sidx выбирает элемент массива структур, field задает имя поля выбранного элемента, а fidx выбирает элемент поля (если это массив или массив ячеек). Входные аргументы sidx, field и fidx можно повторять для обращения к вложенным элементам массива структур. Индекс массива структур и индекс элемента поля должны быть массивами ячеек, а имя поля должно быть строкой.

Например:

s = struct ("baz", 42);
setfield (s, {1}, "foo", {1}, "bar", 54)
⇒
  ans =
    scalar structure containing the fields:
      baz =  42
      foo =
        scalar structure containing the fields:
          bar =  54

В примере сначала создается обычная скалярная структура, в которую затем добавляется вложенная скалярная структура. Во всех случаях, если индекс структуры sidx не указан, по умолчанию используется значение 1 (скалярная структура). Таким образом, приведенный выше пример можно записать короче: setfield (s, "foo", "bar", 54)

Наконец, пример с вложенными массивами структур:

sa.foo = 1;
sa = setfield (sa, {2}, "bar", {3}, "baz", {1, 4}, 5);
sa(2).bar(3)
⇒
  ans =
    scalar structure containing the fields:
      baz =  0   0   0   5

Здесь sa — это массив структур, поле элементов 1 и 2 которого, в свою очередь, является другим массивом структур, третий элемент которого — простая скалярная структура. В конечной скалярной структуре есть поле, содержащее матричное значение.

Обратите внимание, что тот же результат, что и в приведенном выше примере, можно получить следующим образом:

sa.foo = 1;
sa(2).bar(3).baz(1,4) = 5

См. также: getfield, rmfield, orderfields, isfield, fieldnames, isstruct, struct.

: val = getfield (s, field)
: val = getfield (s, sidx1, field1, fidx1, …)

Получает значение поля с именем field из структуры или вложенной структуры s.

Если s — массив структур, то sidx выбирает элемент массива структур, field задает имя поля выбранного элемента, а fidx выбирает элемент поля (если это массив или массив ячеек). Более подробное описание синтаксиса см. в разделе setfield.

См. также: setfield, rmfield, orderfields, isfield, fieldnames, isstruct, struct.

: sout = rmfield (s, "f")
: sout = rmfield (s, f)

Возвращает копию структуры (массива) s без поля f.

Если f — массив ячеек со строками или символьный массив, удаляются все указанные поля.

См. также: orderfields, fieldnames, isfield.

: sout = orderfields (s1)
: sout = orderfields (s1, s2)
: sout = orderfields (s1, {cellstr})
: sout = orderfields (s1, p)
: [sout, p] = orderfields (…)

Возвращает копию s1 с полями, расположенными в алфавитном порядке или в порядке, заданном вторым входным аргументом.

Если задан один входной аргумент-структура s1, имена полей располагаются в алфавитном порядке.

Если задан второй аргумент-структура, имена полей в s1 располагаются в том же порядке, что и в s2. Второй аргумент также может задавать порядок в виде массива ячеек со строками cellstr или в виде вектора перестановки.

Необязательный второй выходной аргумент p — это вектор перестановки, преобразующий исходный порядок имен в новый.

Примеры:

s = struct ("d", 4, "b", 2, "a", 1, "c", 3);
t1 = orderfields (s)
  ⇒ t1 =
       scalar structure containing the fields:
         a =  1
         b =  2
         c =  3
         d =  4
t = struct ("d", {}, "c", {}, "b", {}, "a", {});
t2 = orderfields (s, t)
  ⇒ t2 =
       scalar structure containing the fields:
         d =  4
         c =  3
         b =  2
         a =  1
t3 = orderfields (s, [3, 2, 4, 1])
  ⇒ t3 =
       scalar structure containing the fields:
         a =  1
         b =  2
         c =  3
         d =  4
[t4, p] = orderfields (s, {"d", "c", "b", "a"})
  ⇒ t4 =
       scalar structure containing the fields:
         d =  4
         c =  3
         b =  2
         a =  1
     p =
        1
        4
        2
        3

См. также: fieldnames, getfield, setfield, rmfield, isfield, isstruct, struct.

: s = substruct (type, subs, …)

Создает структуру индексов для использования с subsref или subsasgn.

Например:

idx = substruct ("()", {3, ":"})
  ⇒ idx =
       scalar structure containing the fields:
         type = ()
         subs =
         {
           [1,1] =  3
           [1,2] = :
         }
x = [1, 2, 3;
     4, 5, 6;
     7, 8, 9];
subsref (x, idx)
  ⇒   7   8   9

Примечание: ключевое слово end нельзя использовать внутри subsref или subsasgn при индексировании присваиваний.

См. также: subsref, subsasgn.

© 1996–2026 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.4.0/Manipulating-Structures.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API