indexval
Индексный доступ к массивам и таблицам без оценки
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
indexval(x
,i
) indexval(x, i1, i2, …
)
indexval(x, i)
и indexval(x, i1, i2, ...)
приводят к записи x
, соответствующего индексам i
и i1, i2, ...
, соответственно, без оценки.
Три вызова indexval(x, i)
, _index(x, i)
и x[i]
все возвращают элемент индекса i
в массиве или hfarray или списке или таблице x
. В отличие от _index
и эквивалентного индексного оператора [ ]
, однако, indexval
возвращает соответствующую запись, не оценивая его. Это иногда желательно по причинам эффективности.
Аргументы i
или i1, i2... должны быть допустимыми индексами x
, в противном случае сообщение об ошибке распечатано (см. Пример 3). Когда несколько индексов i1, i2... даны, они интерпретированы как более многомерный индекс (см. Пример 4).
Первый аргумент x
может также быть набором, строкой или последовательностью выражения. Однако в этих случаях indexval
ведет себя точно как _index
и индексный оператор [ ]
: это возвращает оценку соответствующего элемента. В частности, indexval
не сглаживает свой первый аргумент.
Для всех других основных областей indexval
ведет себя точно как _index
: или ошибка происходит, или на символьный звонок indexval
отвечают (см. Пример 3).
indexval
работает с таблицами:
T := table("1" = a, Be = b, `+` = a + b): a := 1: b := 2: indexval(T, Be), indexval(T, "1"), indexval(T, `+`)
В контрастном _index
оценивает возвращенные записи:
_index(T, Be), _index(T, "1"), _index(T, `+`)
Следующая входная строка имеет то же значение как последнее:
T[Be], T["1"], T[`+`]
indexval
работает с массивами, также. Поведение является тем же самым, но индексы должны быть положительными целыми числами:
delete a, b: A := array(1..2, 1..2, [[a, a + b], [a - b, b]]): a := 1: b := 2: indexval(A, 2, 2), indexval(A, 1, 1), indexval(A, 1, 2)
_index(A, 2, 2), _index(A, 1, 1), _index(A, 1, 2)
A[2, 2], A[1, 1], A[1, 2]
delete A, T, a, b:
indexval
работает списки, также:
delete a, b: L := [a, b, 2]: b := 5: L[2], _index(L, 2), indexval(L, 2), op(L, 2)
Однако нет никакого различия между indexval
и _index
для всех других доступных объектов, например, наборы:
delete a, b: S := {a, b, 2}: b := 5: S[2], _index(S, 2), indexval(S, 2), op(S, 2)
Точно так же нет никакого различия, когда первый аргумент является последовательностью выражения (который не сглажен indexval
):
delete a, b: S := a, b, 2: b := 5: S[2], _index(S, 2), indexval(S, 2), op(S, 2)
delete L, S, a, b:
Если второй аргумент не является допустимым индексом, ошибка происходит:
A := array(1..2, 1..2, [[a, b], [a, b]]): indexval(A, 3)
Error: Index dimension does not match. [array]
indexval(A, 1, 0)
Error: Invalid argument. [array]
indexval("12345", 6)
Error: Invalid index. [string]
Однако результатом indexval
может также быть символьный вызов indexval
:
T := table(1 = a, 2 = b): indexval(T, 3)
delete X, i: indexval(X, i)
delete A, T:
Для массивов количество индексов должно быть равно количеству размерностей массива:
A := array(1..2, 1..2, [[a, b], [a, b]]): a := 1: b := 2: indexval(A, 1, 2), indexval(A, 2, 1)
В противном случае ошибка происходит:
indexval(A, 1)
Error: Index dimension does not match. [array]
Таблицы могут иметь последовательности выражения как индексы, также:
delete a, b: T := table((1, 1) = a, (2, 2) = b): a := 1: b := 2: indexval(T, 1, 1), indexval(T, 2, 2)
delete A, T, a, b:
|
По существу таблица, список или массив. Также позволенный: hfarray, конечное множество, последовательность выражения или символьная строка |
|
Индексы. Для большинства “контейнеров” |
Запись x
, соответствующего индексу. Когда x
является таблицей, списком или массивом, возвращенная запись не оценена снова.
x