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

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


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

help:arrays

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


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

Массивы

  • Массив - последовательный набор значений, имеющих один тип данных и обладающих одним названием.
  • Элементы массива идентифицируются по индексам.
    • Индексация ведётся с нуля. Т.е. элемент с индексом 0 - первый элемент массива, 1 - второй и т.д.
    • Максимальный индекс массива 2147483647.
  • Обращение к элементу массива происходит так: сначала указывается название массива, затем в квадратных скобках - числовое выражение, равное индексу элемента, к которому производится обращение.
  • На самом деле каждая переменная в QSP является массивом.
    яблоки = 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) элемент добавляется в конец массива. Настоятельно не рекомендуется сочетать числовые и строковые индексы в пределах одного массива.

Примечание: В силу особенностей платформы числовые и текстовые массивы связаны между собой: добавление элемента в 'массив' добавляет пустой элемент в '$массив' и наоборот со всеми вытекающими последствиями.

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

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

  • 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му варианту


Вперёд:

1) массив['строка'] = значение
help/arrays.1382127322.txt.gz · Последние изменения: 2013/10/19 00:15 (внешнее изменение)