Функции для массивов

Массивы

Массив представляет собой последовательный ряд элементов. Доступ к каждо­му элементу массива, или значению, осуществляется с помощью числового индекса.

Элементы массива могут иметь любой тип данных, включая числа, логические значения 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"

Такой массив вполне допустим, но в этом случае вам придется самостоятельно определять типы данных у отдельных элементов массива по соответствующему индексу.