Функции для массивов
Массивы
Массив представляет собой последовательный ряд элементов. Доступ к каждому элементу массива, или значению, осуществляется с помощью числового индекса.
Элементы массива могут иметь любой тип данных, включая числа, логические значения true/false, трехмерные объекты, строки и т.д. Объекты массивов создаются с помощью специального конструктора массива. В простейшем случае массив создается с помощью следующей команды: myArray = #()
Основы MAXScript
Знак # и последующие круглые скобки обозначают массив. С помощью приведенного выше оператора была создана переменная myArray, в которой сохранен пустой массив.
Пустой массив пока еще не содержит никаких элементов. Такие элементы можно ввести в массив, например, путем присваивания ему конкретных значений во время его создания: myArray = #(1,2,4,8,16)
Данный массив содержит пять целочисленных элементов. У каждого из них имеется соответствующий индекс. В частности, у первого элемента массива (перечисленного выше целого значения 1) имеется индекс 1, у второго элемента массива — индекс 2 и т.д. Доступ к отдельным элементам массива осуществляется по его индексу, указываемому в квадратных скобках.
В следующей строке кода возвращается значение третьего элемента массива (целое число 4): myArray [3]
А в приведенной ниже строке кода значение третьего элемента массива заменяется целым числом 28. Подобным способом можно заполнить массив нужными значениями: myArray [3] = 28
Отдельные элементы присоединяются к массиву с помощью команды append: append myArray 56
В приведенной выше строке кода к массиву присоединяется шестой его элемент (целое значение 56). В массиве можно хранить любой ряд элементов, включая трехмерные объекты.
Для того чтобы сохранить объект в массиве, выполните следующее упражнение.
1. Установите 3dsMax в исходное состояние или же удалите со сцены все объекты.
2. Введите в окне приемника команд следующий фрагмент кода и вычислите результат:
c = cylinder pos: [50,0,0]
b = box()
s = spherepos: [-50,0,0]
В разных местах сцены будут созданы три объекта.
3. Введите в окне приемника команд следующее выражение и вычислите результат:
objectArray = #(c,b,s)
В итоге будет создан массив, содержащий три объекта.
4. Введите следующий фрагмент кода и вычислите результат:
d = donut()
append objectArray d
Таким образом, к массиву будет присоединен тороидальный объект.
Глава 1
Массивы весьма полезны для выполнения однотипных операций над несколькими объектами или значениями. Для последовательного обращения к элементам массива совсем не обязательно знать число его элементов. Вот как это делается:
a = #("one", "word", "at", "a", "time")
for i = 1 to a.count do
(
messagebox a[i]
)
Свойство .count массива объектов всегда содержит общее число элементов массива.
Для работы с массивами имеется целый ряд дополнительных функций. К их числу относятся deleteltem, join, sort и findItem. Ниже приведены примеры синтаксиса этих функций.
• Функция deleteItem удаляет элемент, обозначаемый вторым аргументом данной функции. В приведенном ниже примере элемент arr[2] удаляется из массива, а значение счетчика массива (arr.count) автоматически уменьшается на 1.
arr = #(1.0, .55, .3, 2.6)
deleteltem arr 2
for i = 1 to arr.count do
messagebox (arr[i] as string)
• Функция join объединяет два массива, а также совокупность и массив:
for i = 1 to 3 do
(
sphere() box()
)
arr = $sphere* as array join arr $box*
for i = 1 to arr.count do
messagebox arr[i].name
• Функция findItem может оказаться полезной в самых разных ситуациях. С ее помощью можно, в частности, найти конкретное значение. Она возвращает индекс искомого значения. Если искомое значение отсутствует в массиве, функция findItem возвращает 0:
arr = #(2.4, 4, 3.2, 1.1)
index = findltem arr 3.2 -- Найденный индекс будет равен 3
messagebox (index as string)
-- Значение 3.3 отсутствует в массиве, поэтому возвращаемый
-- индексравен 0
index = findltem arr 3.3
messagebox (index as string)
• Функция sort организует массив в порядке убывания. Если массив состоит из строк, он организуется в алфавитном порядке. Синтаксис данной функции следующий:
sort arr
Основы MAXScript
Функция sort дает ошибку, если элементы массива не относятся к одному и тому же типу данных. В большинстве языков программирования массив может содержать данные только одного типа, а в MAXScript элементы одного массива могут быть разнотипными, например:
-- Сначала создать пустой массив
arr = #()
-- А затем ввести ряд его элементов
arr[1] = 4
arr[2] = "stringstuff"
Такой массив вполне допустим, но в этом случае вам придется самостоятельно определять типы данных у отдельных элементов массива по соответствующему индексу.