Перейти к основному содержимому

20.24. Как проще заполнять массив?

В:

Нет ли способа упростить внесение первоначальных данных в массив? Чтобы не писать

mass[0] = 123
mass[1] = 234
mass[2] = 345
! и т.д.

а вместо этого написать что-то типа

mass = [123, 234, 345]

О:

Внимание!!

Кортежи будут выделены в новый тип данных в версиях плеера выше 5.8.0, поэтому данный алгоритм требует пересмотра.

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

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

Вот как может выглядеть такая функция:

!# full_array

local $arr_name_, $tuple_ = $args[0], $args[1]
loop while $arritem($arr_name_, arrsize($arr_name_)-1) <> $tuple_:
dynamic "<<$arr_name_>>[], $tuple_ = $tuple_"
end
! за упрощение алгоритма спасибо HronoStranger`у

Теперь, когда нам нужно быстро записать в массив много значений, не расписывая на множество строчек присвоение каждой ячейке, мы просто вызываем функцию "full_array":

! вносим в массив значения

@full_array('mass', (123, 234, 345))

! для проверки внесённых значений используем цикл

loop local i = 0 while i < arrsize('mass') step i += 1:
*pl mass[i]
end

Данная функция была реализована в easy.math версии 3.0.