- Вывод текста
- Программирование
- Оформление
- Расширенные возможности
- Нюансы написания игр под разные плееры
-
- x AeroQSP
- Утилиты и средства разработки
Это старая версия документа.
яблоки = 0 !эквивалентно яблоки[0] = 0
$яблоки[0]='антоновка' $яблоки[1]='белый налив' $яблоки[2]='астраханское' $яблоки[3]='ранетка' $яблоки[4]='симиренко' сорт_яблока[0] = 1 сорт_яблока[1] = 2 сорт_яблока[2] = 4 *pl $яблоки[сорт_яблока[номер_яблока]]
$любимый_сорт['иван'] = $яблоки[2] любимое_число['Алексей'] = 5 $item_loc['палка'] = 'лес'
$objs[] = 'Напильник' &! Если массив был пустой, то $objs[] = 'Топор' &! [0] = 'Напильник', $objs[] = 'Доска' &! [1] = 'Топор', [2] = 'Доска'
$a = $objs[] &! 'Доска' из примера выше a = сорт_яблока[] &! 4 из примера выше
Примечание: При добавлении в массив элемента со строковым индексом1) элемент добавляется в конец массива. Настоятельно не рекомендуется сочетать числовые и строковые индексы в пределах одного массива.
Примечание: В силу особенностей платформы числовые и текстовые массивы связаны между собой: добавление элемента в 'массив' добавляет пустой элемент в '$массив' и наоборот со всеми вытекающими последствиями.
Примечание: Настоятельно не рекомендуется использовать большие числовые индексы без необходимости.
a[0]=4 a[1]=3 a[2]=23 a[3]=15 KILLVAR 'a',1 !теперь массив выглядит так: a[0]=4 a[1]=23 a[2]=15
KILLVAR &! удаляет все переменные, массивы KILLVAR 'a' &! удаляет массив 'a' KILLVAR 'a',3 &! удалит из массива 'a' элемент с индексом 3.
COPYARR '$a','$b' COPYARR 'a','b' COPYARR $arrname1,$arrname2,10,5 COPYARR 'a<<$arrname1>>','a<<$arrname2>>'
n = ARRSIZE('a')
n = ARRSIZE('$a')
!Результат будет одинаковый
!Поиск строки 'This' в текстовом массиве "$A"
ARRPOS(0,'$A','This')
!Поиск числа 65 в массиве "A" (два элемента массива игнорируются)
ARRPOS(2,'A',65)
!Поиск строки 'test' среди значений массива "$B"
ARRPOS('$B','test')
!Поиск строки 'This' среди элементов массива "$A"
ARRCOMP(0,'A','This')
!'Поиск строки, соответствующей регулярному выражению "abc\d+"
(первые два элемента массива игнорируются)'
ARRCOMP(2,'A','abc\d+')
!'аналогично предыдущему примеру, но поиск осуществляется
по всем элементам массива'
ARRCOMP(0,'A','.*string.*')
ARRCOMP('A','This') &! эквивалентно 1му варианту
Пример симуляции двумерного массива
! Индексы i1 0..8
i1_max=9
! Индексы i2 0..5
i2_max=6
! Заполнение данных массива
i1=0
:ПрыгЗадатьМассив1
i2=0
:ПрыгЗадатьМассив2
$ДвумерныйМассив[i1*i2_max+i2]='[<<i1>>,<<i2>>]'
i2+=1
if i2<i2_max : Jump 'ПрыгЗадатьМассив2'
i1+=1
if i1<i1_max : Jump 'ПрыгЗадатьМассив1'
! Вывод данных массива
i1=0
:ПрыгВыводМассива1
*Nl
i2=0
:ПрыгВыводМассива2
*P $ДвумерныйМассив[i1*i2_max+i2]+' '
i2+=1
if i2<i2_max : Jump 'ПрыгВыводМассива2'
i1+=1
if i1<i1_max : Jump 'ПрыгВыводМассива1'
*Nl
!{Результат
[0,0] [0,1] [0,2] [0,3] [0,4] [0,5]
[1,0] [1,1] [1,2] [1,3] [1,4] [1,5]
[2,0] [2,1] [2,2] [2,3] [2,4] [2,5]
[3,0] [3,1] [3,2] [3,3] [3,4] [3,5]
[4,0] [4,1] [4,2] [4,3] [4,4] [4,5]
[5,0] [5,1] [5,2] [5,3] [5,4] [5,5]
[6,0] [6,1] [6,2] [6,3] [6,4] [6,5]
[7,0] [7,1] [7,2] [7,3] [7,4] [7,5]
[8,0] [8,1] [8,2] [8,3] [8,4] [8,5]
}
!Получение индексов массива через функцию ARRPOS
$Поиск='[2,5]'
i1=ARRPOS('$ДвумерныйМассив',$Поиск)/i2_max
i2=ARRPOS('$ДвумерныйМассив',$Поиск) mod i2_max
if ARRPOS('$ДвумерныйМассив',$Поиск)<>-1 :
*Nl $Поиск+'=[<<i1>>,<<i2>>]'
else
*Nl 'Элемент не найден'
end
!{Результат
[2,5]=[2,5]
}
Пример работы с массивом имеющим текстовые индексы
! Индексы i1 0..3
i1_max=4
! Индексы i2 0..5
i2_max=6
! Заполнение данных массива
i1=0
:ПрыгЗадатьМассив1
i2=0
:ПрыгЗадатьМассив2
! Знак двоеточие используется как разделитель
! между двумя численными индексами переведенными в текст
$ДвумерныйМассивТекстовыйИндекс['<<i1>>:<<i2>>']='[<<i1>>,<<i2>>]'
! $МассивИндекс нужен для дальнейшего поиска через ARRPOS/ARRCOMP
$МассивИндекс['<<i1>>:<<i2>>']='<<i1>>:<<i2>>'
! МассивПорядок нужен для использования KILLVAR
МассивПорядок['<<i1>>:<<i2>>']=ARRSIZE('МассивПорядок')
! Добавлять новый элемент и удалять нужно
!только одновременно в 3х массивах
i2+=1
if i2<i2_max : Jump 'ПрыгЗадатьМассив2'
i1+=1
if i1<i1_max : Jump 'ПрыгЗадатьМассив1'
! Вывод данных массива
i1=0
:ПрыгВыводМассива1
*Nl
i2=0
:ПрыгВыводМассива2
*P $ДвумерныйМассивТекстовыйИндекс['<<i1>>:<<i2>>']+' '
i2+=1
if i2<i2_max : Jump 'ПрыгВыводМассива2'
i1+=1
if i1<i1_max : Jump 'ПрыгВыводМассива1'
*Nl
!{ Результат
[0,0] [0,1] [0,2] [0,3] [0,4] [0,5]
[1,0] [1,1] [1,2] [1,3] [1,4] [1,5]
[2,0] [2,1] [2,2] [2,3] [2,4] [2,5]
[3,0] [3,1] [3,2] [3,3] [3,4] [3,5]
}
!Получение индексов массива через функцию ARRPOS
$Поиск='[3,0]'
N=ARRPOS('$ДвумерныйМассивТекстовыйИндекс',$Поиск)
if N<>-1:
!Ищем разделитель ':' в индексе
K=STRPOS($МассивИндекс[N],':')
i1=VAL(MID($МассивИндекс[N],0,K-1))
i2=VAL(MID($МассивИндекс[N],K+1,LEN($МассивИндекс[N])-K))
*NL $Поиск+'=[<<i1>>,<<i2>>]'
else
*Nl 'Элемент не найден'
end
!{ Результат
[3,0]=[3,0]
}
*NL
!Удаление элемента массива через текстовый индекс
$Удалить='<<i1>>:<<i2>>'
*NL 'Удаляем элемент с индексом <<i1>>:<<i2>>'
!Получаем номер элемента
N=МассивПорядок[$Удалить]
!Удаляем элемент
KILLVAR '$ДвумерныйМассивТекстовыйИндекс', N
KILLVAR '$МассивИндекс', N
KILLVAR 'МассивПорядок', N
!Еще раз выводим данные массива
i1=0
:ПрыгВыводМассива3
*Nl
i2=0
:ПрыгВыводМассива4
if $ДвумерныйМассивТекстовыйИндекс['<<i1>>:<<i2>>']<>'':
*P $ДвумерныйМассивТекстовыйИндекс['<<i1>>:<<i2>>']+' '
else
*P '[DEL] '
end
i2+=1
if i2<i2_max : Jump 'ПрыгВыводМассива4'
i1+=1
if i1<i1_max : Jump 'ПрыгВыводМассива3'
!{ Результат
Удаляем элемент с индексом 3:0
[0,0] [0,1] [0,2] [0,3] [0,4] [0,5]
[1,0] [1,1] [1,2] [1,3] [1,4] [1,5]
[2,0] [2,1] [2,2] [2,3] [2,4] [2,5]
[DEL] [3,1] [3,2] [3,3] [3,4] [3,5]
}
Пример использования индекса в названии массива
! Индексы i1 0..5
i1_max=6
! Индексы i2 0..2
i2_max=3
! Заполнение данных массива
i1=0
:ПрыгЗадатьМассив1
i2=0
:ПрыгЗадатьМассив2
!названия заполняемых массивов
!$МассивПеременных0 , $МассивПеременных1 , $МассивПеременных2
DYNAMIC {$МассивПеременных}+i1+{['<<i2>>']='[<<i1>>,<<i2>>]' }
i2+=1
if i2<i2_max : Jump 'ПрыгЗадатьМассив2'
i1+=1
if i1<i1_max : Jump 'ПрыгЗадатьМассив1'
! Вывод данных массива
i1=0
:ПрыгВыводМассива1
*Nl
i2=0
:ПрыгВыводМассива2
DYNAMIC {*P $МассивПеременных}+i1+{['<<i2>>'] +' '}
i2+=1
if i2<i2_max : Jump 'ПрыгВыводМассива2'
i1+=1
if i1<i1_max : Jump 'ПрыгВыводМассива1'
!{ Результат
[0,0] [0,1] [0,2]
[1,0] [1,1] [1,2]
[2,0] [2,1] [2,2]
[3,0] [3,1] [3,2]
[4,0] [4,1] [4,2]
[5,0] [5,1] [5,2]
}