Инструменты пользователя

Инструменты сайта


Боковая панель

help:arrays

Это старая версия документа.


Назад: Программный код

Массивы

  • Массив - последовательный набор значений, имеющих один тип данных и обладающих одним названием.
  • Элементы массива идентифицируются по индексам.
    • Индексация ведётся с нуля. Т.е. элемент с индексом 0 - первый элемент массива, 1 - второй и т.д.
  • Обращение к элементу массива происходит так: сначала указывается название массива, затем в квадратных скобках - числовое выражение, равное индексу элемента, к которому производится обращение.
  • На самом деле каждая переменная в QSP является массивом.
    яблоки = 0
    !эквивалентно
    яблоки[0] = 0
    
  • Соответственно для текстового массива нужно не забивать использовать символ '$' в имени.

A[2]=89 - присвоить числовому значению 3-го элемента массива "A" значение 89

$B[3]='Cool' - присвоить текстовому значению 4-го элемента массива "B" значение 'Cool'

A=B[5] - присвоить числовому значению переменной "A" числовое значение 6-го элемента массива "B"

$C=$MAS[54] - аналогично

Массивы могут индексироваться через строки. Регистр символов данной строки не имеет значения. Примеры:

$ARR['mystring'] = 'value' эквивалентно $arr['MyString'] = 'value'

ARR['mystring'] = 890

$item_loc['палка'] = 'лес'

$DESCS[$curloc] = '«$DESCS[$curloc]» text.'

values['67'] = 87

Кроме этого, существует упрощённый синтаксис добавления элемента в массив - если индекс элемента не указан, то будет выбран элемент, следующий за последним. Например:

$objs[] = 'Топор'

$objs[] = 'Напильник'

$objs[] = 'Доска'

При получении значения, если индекс элемента не указан, то будет выбран последний элемент. Например:

$a = $objs[]

a = objs[]

PS:

В QSP все переменные являются массивами (если не указывать индекс - он будет равен 0), поэтому обращение "A=AR[5]" полностью эквивалентно такому: "A[0]=AR[5]". Следствие этого - к названиям массивов применяются точно такие же правила записи, как к названиям переменных.

Функции и операторы

KILLVAR [$название массива],[#индекс элемента] - удаление элемента массива. Если индекс элемента не указан, то очищается весь массив. Если оператор вызван без аргументов, то удаляются все переменные - обычно применяется в начале игры, чтобы при возврате в начальную локацию после неудачного прохождения какого-то этапа игры обнулить все переменные (в противном случае, может оказаться, что запертые двери уже открыты, жена похищена до свадьбы, а Баба-Яга уже отдала кому-то нужный клубочек). Примеры:

KILLVAR

KILLVAR 'a'

KILLVAR 'a',3

COPYARR [$массив-приёмник],[$массив-источник] - копирование содержимого массива в другой массив. Копируются как текстовые, так и числовые значения массива. Размер массива-приёмника при копировании не имеет значения. Примеры:

COPYARR '$a','$b'

COPYARR 'a','b'

COPYARR $arrname1,$arrname2

COPYARR 'a«$arrname1»','a«$arrname2»'

ARRSIZE([$выражение]) - возвращает число элементов в массиве с названием [$выражение].

ARRPOS([#выражение 1],[$выражение 2],[выражение 3]) - возвращает индекс элемента массива с названием [$выражение 2], равного значению выражения [выражение 3]. Поиск начинается с элемента номер [#выражение 1]; индексация элементов массива ведётся с нуля. Параметр [#выражение 1] может отсутствовать, при этом он принимается равным 0. Если указанное значение не найдено, функция возвращает -1.

Чтобы найти числовое значение в массиве, нужно в [$выражение 2] подставить лишь название массива (в кавычках), для строкового - название массива с символом "$" перед его названием. Примеры:

ARRPOS(0,'$A','This') - найдёт строку 'This' в текстовых значениях массива "A" (или вернёт -1, если такого значения не существует)

ARRPOS(2,'A',65) - найдёт число 65 в числовых значениях массива "A" (при этом первые два элемента массива игнорируются)

ARRPOS('$B','test') - поиск строки 'test' среди текстовых значений массива "B"

См. также функции "MAX, MIN" (раздел "Базовые функции языка QSP"), функцию "ARRCOMP" (раздел "Функции, работающие с регулярными выражениями") и операторы для работы с переменными / массивами (здесь).

Функции, использующие регулярные выражения

Top Previous Next

ARRCOMP([#выражение 1],[$выражение 2],[$выражение 3]) - возвращает индекс элемента массива с названием [$выражение 2], соответствующего регулярному выражению [$выражение 3]. Поиск начинается с элемента номер [#выражение 1]; индексация элементов массива ведётся с нуля. Параметр [#выражение 1] может отсутствовать, при этом он принимается равным 0. Если элемент не найден, функция возвращает -1.

Поиск происходит среди текстовых элементов массива. Примеры:

ARRCOMP(0,'A','This') - найдёт строку 'This' среди текстовых элементов массива "A" (или вернёт -1, если такого значения не существует)

ARRCOMP(2,'A','abc\d+') - найдёт строку, соответствующую регулярному выражению "abc\d+", в текстовых значениях массива "A" (первые два элемента массива игнорируются)

ARRCOMP(0,'A','.*string.*') - аналогично предыдущему примеру, но поиск осуществляется по всем текстовым элементам массива

ARRCOMP('A','This') - эквивалентно 1му варианту


Вперёд:

help/arrays.1382094186.txt.gz · Последние изменения: 2013/10/18 15:03 (внешнее изменение)