Здесь показаны различия между двумя версиями данной страницы.
Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
help:arrays [2025/04/19 06:41] aleks_versus [Функции и операторы для работы с массивами] дублировался арсайз |
help:arrays [2025/09/28 06:39] (текущий) aleks_versus [Многомерные массивы] |
||
---|---|---|---|
Строка 86: | Строка 86: | ||
То же самое и в случае, когда мы хотим получить значение из ячейки массива: если мы хотим получить строковое значение, нужно поставить символ ''%%$%%'' перед именем массива. | То же самое и в случае, когда мы хотим получить значение из ячейки массива: если мы хотим получить строковое значение, нужно поставить символ ''%%$%%'' перед именем массива. | ||
- | И точно так же это работает для числовых значений и кортежей: - Если нам нужно присвоить ячейке массива, или получить из неё, числовое значение, никаких символов мы перед именем массива не ставим (без префикса типа). - Если нам нужно присвоить ячейке массива, или получить из неё, кортеж, ставим символ ''%'' перед именем массива (указываем префикс типа). | + | И точно так же это работает для числовых значений и кортежей: |
+ | * Если нам нужно присвоить ячейке массива, или получить из неё, числовое значение, никаких символов мы перед именем массива не ставим (без префикса типа). | ||
+ | * Если нам нужно присвоить ячейке массива, или получить из неё, кортеж, ставим символ ''%'' перед именем массива (указываем префикс типа). | ||
Примеры: | Примеры: | ||
Строка 175: | Строка 177: | ||
* Плеер создаёт новую ячейку с новым числовым индексом, следующим по порядку. Например, если в массиве уже были созданы три ячейки, создаётся ячейка с числовым индексом ''%%3%%''. | * Плеер создаёт новую ячейку с новым числовым индексом, следующим по порядку. Например, если в массиве уже были созданы три ячейки, создаётся ячейка с числовым индексом ''%%3%%''. | ||
- | * Затем плеер "прикрепляет" указанный строковый индекс к числовому. | + | * Затем плеер "прикрепляет" указанный строковый индекс к этой ячейке. |
Поэтому, если вы создаёте ячейку со строковым индексом, вы можете получать из неё значения в том числе и по числовому индексу: | Поэтому, если вы создаёте ячейку со строковым индексом, вы можете получать из неё значения в том числе и по числовому индексу: | ||
Строка 233: | Строка 235: | ||
* Плеер создаёт новую ячейку с новым **числовым** индексом, следующим по порядку. Например, если в массиве уже были созданы семь ячеек, создаётся ячейка с числовым индексом ''%%7%%''. | * Плеер создаёт новую ячейку с новым **числовым** индексом, следующим по порядку. Например, если в массиве уже были созданы семь ячеек, создаётся ячейка с числовым индексом ''%%7%%''. | ||
- | * Затем плеер "прикрепляет" указанный многомерный индекс к числовому. | + | * Затем плеер "прикрепляет" указанный многомерный индекс к ячейке. |
Поэтому, если вы создаёте ячейку с многомерным индексом, вы можете получать из неё значения в том числе и по числовому индексу: | Поэтому, если вы создаёте ячейку с многомерным индексом, вы можете получать из неё значения в том числе и по числовому индексу: | ||
Строка 253: | Строка 255: | ||
%coords = [120, 450, -37] | %coords = [120, 450, -37] | ||
$map[%coords] = 'Alien' | $map[%coords] = 'Alien' | ||
- | </sxh> - Запись с дополнительным набором скобок эквивалентна записи с одним набором скобок при указании индекса ячейки массива: <sxh qsp> | + | </sxh> |
+ | * Запись с дополнительным набором скобок эквивалентна записи с одним набором скобок при указании индекса ячейки массива: <sxh qsp> | ||
$array[1, 2, 137] | $array[1, 2, 137] | ||
! эквивалентно | ! эквивалентно | ||
Строка 300: | Строка 303: | ||
===== Функции и операторы для работы с массивами ===== | ===== Функции и операторы для работы с массивами ===== | ||
- | * ''%%KILLVAR [$имя_массива], [индекс_элемента]%%'' - удаление элемента с индексом ''%%[индекс_элемента]%%'' из массива с названием ''%%[$имя_массива]%%''. Название массива всегда нужно писать в кавычках. Пример: <sxh qsp> | + | * ''**KILLVAR** [$имя_массива], [индекс_элемента]'' - удаление элемента с индексом ''%%[индекс_элемента]%%'' из массива с названием ''%%[$имя_массива]%%''. Название массива всегда нужно писать в кавычках. Пример: <sxh qsp> |
! удаление по числовому индексу | ! удаление по числовому индексу | ||
killvar 'яблоко',3 | killvar 'яблоко',3 | ||
Строка 327: | Строка 330: | ||
a[2]=15 | a[2]=15 | ||
</sxh> | </sxh> | ||
- | * ''%%KILLALL%%'' - оператор эквивалентен конструкции "''%%KILLVAR & KILLOBJ%%''", то есть удаляет все переменные/массивы в игре, а так же очищает Окно предметов. Обычно применяется в начале игры, чтобы при возврате в начальную локацию после неудачного прохождения какого-то этапа игры обнулить все переменные (в противном случае, может оказаться, что запертые двери уже открыты, жена похищена до свадьбы, а Баба-Яга уже отдала кому-то нужный клубочек). | + | * ''**KILLALL**'' - оператор эквивалентен конструкции "''%%KILLVAR & KILLOBJ%%''", то есть удаляет все переменные/массивы в игре, а так же очищает Окно предметов. Обычно применяется в начале игры, чтобы при возврате в начальную локацию после неудачного прохождения какого-то этапа игры обнулить все переменные (в противном случае, может оказаться, что запертые двери уже открыты, жена похищена до свадьбы, а Баба-Яга уже отдала кому-то нужный клубочек). |
- | * ''%%COPYARR [$приёмник],[$источник],[#начало],[#количество]%%'' - копирование в массив-приёмник ''%%[#количество]%%'' элементов из массива-источника начиная с элемента под номером ''%%[#начало]%%''. Размер массива-приёмника при копировании не имеет значения. | + | * ''**COPYARR** [$приёмник],[$источник],[#начало],[#количество]'' - копирование в массив-приёмник ''%%[#количество]%%'' элементов из массива-источника начиная с элемента под номером ''%%[#начало]%%''. Размер массива-приёмника при копировании не имеет значения. |
* Параметр ''%%[#количество]%%'' является необязательным. По умолчанию - до конца массива-источника. | * Параметр ''%%[#количество]%%'' является необязательным. По умолчанию - до конца массива-источника. | ||
* Параметр ''%%[#начало]%%'' является необязательным. По умолчанию - ''%%0%%''. | * Параметр ''%%[#начало]%%'' является необязательным. По умолчанию - ''%%0%%''. | ||
Строка 339: | Строка 342: | ||
COPYARR 'a<<$arrname1>>','a<<$arrname2>>' | COPYARR 'a<<$arrname1>>','a<<$arrname2>>' | ||
</sxh> | </sxh> | ||
- | * ''%%SORTARR [$имя_массива], [#порядок]%%'' — Данный оператор сортирует указанный массив. Параметр ''%%[#порядок]%%'' опционален. Если не указан или равен 0, то сортирует массив по возрастанию (от меньшего к большему). Если равен 1, то сортирует массив по убыванию (от большего к меньшему). | + | * ''**SORTARR** [$имя_массива], [#порядок]'' — Данный оператор сортирует указанный массив. Параметр ''%%[#порядок]%%'' опционален. Если не указан или равен 0, то сортирует массив по возрастанию (от меньшего к большему). Если равен 1, то сортирует массив по убыванию (от большего к меньшему). |
* Может сортировать массивы любых типов (числа, строки, кортежи), но не допускается смешивать значения разных типов в одном массиве. | * Может сортировать массивы любых типов (числа, строки, кортежи), но не допускается смешивать значения разных типов в одном массиве. | ||
* Для указания типа сортируемых значений нужно указать префикс типа как часть имени массива (''%%$%%'', ''%''). | * Для указания типа сортируемых значений нужно указать префикс типа как часть имени массива (''%%$%%'', ''%''). | ||
Строка 352: | Строка 355: | ||
end | end | ||
</sxh> | </sxh> | ||
- | * ''%%SCANSTR [$имя_массива], [$текст_для_разбора], [$регэксп], [#номер_группы]%%'' — в массив ''%%[$имя_массива]%%'' помещаются строки, соответствующие [[help:regexp|регулярному выражению]] ''%%[$регэксп]%%'', которые будут найдены в строке ''%%[$текст_для_разбора]%%''. Если указан параметр ''%%[#номер_группы]%%'', в массив будет помещаться не вся строка, соответствующая регулярному выражению, а лишь часть, соответствующая указанной группе в этом регулярном выражении. Примеры: <sxh qsp> | + | * ''**SCANSTR** [$имя_массива], [$текст_для_разбора], [$регэксп], [#номер_группы]'' — в массив ''%%[$имя_массива]%%'' помещаются строки, соответствующие [[help:regexp|регулярному выражению]] ''%%[$регэксп]%%'', которые будут найдены в строке ''%%[$текст_для_разбора]%%''. Если указан параметр ''%%[#номер_группы]%%'', в массив будет помещаться не вся строка, соответствующая регулярному выражению, а лишь часть, соответствующая указанной группе в этом регулярном выражении. Примеры: <sxh qsp> |
! вытаскиваем из строки все слова: | ! вытаскиваем из строки все слова: | ||
$text = 'Шла Саша по шоссе, а Грека через реку.' | $text = 'Шла Саша по шоссе, а Грека через реку.' | ||
Строка 368: | Строка 371: | ||
!В массиве $words окажутся значения: 'first', 'second', 'third' | !В массиве $words окажутся значения: 'first', 'second', 'third' | ||
</sxh> | </sxh> | ||
- | * ''%%ARRITEM([$имя_массива],[индекс_элемента])%%'' — возвращает значение элемента массива с названием ''%%[$имя_массива]%%'' по указанному индексу. То есть функция извлекает значение из указанной ячейки массива. Примеры: <sxh qsp> | + | * ''**ARRITEM(**[$имя_массива],[индекс_элемента]**)**'' — возвращает значение элемента массива с названием ''%%[$имя_массива]%%'' по указанному индексу. То есть функция извлекает значение из указанной ячейки массива. Примеры: <sxh qsp> |
! выводим значение элемента с индексом 3 | ! выводим значение элемента с индексом 3 | ||
*pl $arritem('$mass', 3) | *pl $arritem('$mass', 3) | ||
Строка 391: | Строка 394: | ||
end | end | ||
</sxh> | </sxh> | ||
- | * ''%%SETVAR [$имя_массива], [значение], [индекс]%%'' — устанавливает значение элемента массива с названием ''%%[$имя_массива]%%'' по указанному индексу. То есть оператор присваивает значение указанной ячейке массива. Префикс имени переменной указывает тип значения, которое нужно записать в элемент массива (как с обычными присваиваниями). Параметр ''[индекс]'' опционален. Если этот параметр не указан, то значение присваивается 0-му элементу. Значение и индекс могут быть любых типов. Примеры: <sxh qsp> | + | * ''**SETVAR** [$имя_массива], [значение], [индекс]'' — устанавливает значение элемента массива с названием ''%%[$имя_массива]%%'' по указанному индексу. То есть оператор присваивает значение указанной ячейке массива. Префикс имени переменной указывает тип значения, которое нужно записать в элемент массива (как с обычными присваиваниями). Параметр ''[индекс]'' опционален. Если этот параметр не указан, то значение присваивается 0-му элементу. Значение и индекс могут быть любых типов. Примеры: <sxh qsp> |
SETVAR 'A', 65 | SETVAR 'A', 65 | ||
SETVAR '$X', 'name', 4 | SETVAR '$X', 'name', 4 | ||
Строка 398: | Строка 401: | ||
SETVAR '%Q', ['пример', 'кортежа'], [x, y] | SETVAR '%Q', ['пример', 'кортежа'], [x, y] | ||
</sxh> Данный оператор дополняет функцию ''**ARRITEM**'' и позволяет избегать использования ''DYNAMIC'' в некоторых случаях. | </sxh> Данный оператор дополняет функцию ''**ARRITEM**'' и позволяет избегать использования ''DYNAMIC'' в некоторых случаях. | ||
- | * ''%%ARRSIZE([$имя_массива])%%'' - функция возвращает число элементов массива с названием ''%%[$имя_массива]%%''. | + | * ''**ARRSIZE(**[$имя_массива]**)**'' - функция возвращает число элементов массива с названием ''%%[$имя_массива]%%''. |
* Не имеет значения, указываете ли вы ''%%$%%'' или ''%%%%%'' перед названием массива или нет. Подсчитывается общее число ячеек и со значениями любых типов. | * Не имеет значения, указываете ли вы ''%%$%%'' или ''%%%%%'' перед названием массива или нет. Подсчитывается общее число ячеек и со значениями любых типов. | ||
* Примеры: <sxh qsp> | * Примеры: <sxh qsp> | ||
Строка 414: | Строка 417: | ||
* Пример: <sxh qsp> | * Пример: <sxh qsp> | ||
$ddd = 'text' | $ddd = 'text' | ||
- | arrtype('ddd') & ! '$' | + | $arrtype('ddd') & ! '$' |
$g = 'text' & g = 13 | $g = 'text' & g = 13 | ||
- | arrtype('g') & ! '#' | + | $arrtype('g') & ! '#' |
%tuple['index'] = [12, 'string'] | %tuple['index'] = [12, 'string'] | ||
- | arrtype('tuple', 'index') & ! '%' | + | $arrtype('tuple', 'index') & ! '%' |
! $empty not exist | ! $empty not exist | ||
- | arrtype('$empty') & ! '' | + | $arrtype('$empty') & ! '' |
+ | </sxh> | ||
+ | * ''**ARRPOS(**[$имя_массива], [значение], [#старт]**)**'' — возвращает индекс элемента массива равного указанному значению. | ||
+ | * Поиск начинается с элемента с заданным номером ''[#старт]''. | ||
+ | * Индексация элементов массива ведётся с нуля. | ||
+ | * Если указанное значение не найдено, функция возвращает -1. | ||
+ | * Пример: <sxh qsp> | ||
+ | $color[0] = 'красный' | ||
+ | $color[1] = 'жёлтый' | ||
+ | $color[2] = 'зелёный' | ||
+ | $color[3] = 'синий' | ||
+ | $color[4] = 'жёлтый' | ||
+ | |||
+ | arrpos('$color', 'жёлтый') & ! вернёт значение 1 | ||
+ | arrpos('$color', 'жёлтый', 2) & ! вернёт значение 4 | ||
+ | arrpos('$color','голубой') & ! вернёт значение -1 | ||
+ | </sxh> | ||
+ | * Другие примеры: <sxh qsp> | ||
+ | ! поиск строки 'this' в текстовом массиве "$a" | ||
+ | arrpos('$a', 'this', 0) | ||
+ | ! поиск числа 65 в массиве "a" (два элемента массива игнорируются) | ||
+ | arrpos('a', 65, 2) | ||
+ | ! поиск строки 'test' среди значений массива "$b" | ||
+ | arrpos('$b', 'test') | ||
+ | </sxh> | ||
+ | * Можно искать значения любого типа, однако: | ||
+ | * если вы ищете среди текстовых значений массива, нужно указывать префикс типа ''$'' перед названием массива; | ||
+ | * если вы ищете среди кортежей в массиве, нужно указывать префикс типа ''%''. | ||
+ | * Пример: <sxh qsp> | ||
+ | $a[0] = '12' | ||
+ | a[1] = 12 | ||
+ | %a[2] = [12] | ||
+ | %a[3] = ['12'] | ||
+ | arrpos('$a', 12) & ! 0 | ||
+ | arrpos('a', 12) & ! 1 | ||
+ | arrpos('%a', 12) & ! 2 | ||
+ | arrpos('%a', '12') & ! 2 <--- | ||
+ | arrpos('%a', [12]) & ! 2 | ||
+ | arrpos('%a', ['12']) & ! 2 <--- | ||
</sxh> | </sxh> | ||
- | * ''%%MAX([выр1],[выр2], …)%%'' - возвращает максимальное из значений выражений-аргументов. Если передан один аргумент, то считается, что указано имя массива: <sxh qsp> | + | * ''**MAX(**[выр1],[выр2], …**)**'' - возвращает максимальное из значений выражений-аргументов. Если передан один аргумент, то считается, что указано имя массива: <sxh qsp> |
MAX('a') &! вернёт максимальное из числовых значений элементов массива "a" | MAX('a') &! вернёт максимальное из числовых значений элементов массива "a" | ||
MAX('$b') &! вернёт максимальное из текстовых значений элементов массива "$b" | MAX('$b') &! вернёт максимальное из текстовых значений элементов массива "$b" | ||
MAX('%d') &! вернёт максимальный из кортежей в массиве '%d' | MAX('%d') &! вернёт максимальный из кортежей в массиве '%d' | ||
</sxh> | </sxh> | ||
- | * ''%%MIN([выр1],[выр2], …)%%'' - возвращает минимальное из значений выражений-аргументов. Если передан один аргумент, то считается, что указано имя массива: <sxh qsp> | + | * ''**MIN(**[выр1],[выр2], …**)**'' - возвращает минимальное из значений выражений-аргументов. Если передан один аргумент, то считается, что указано имя массива: <sxh qsp> |
MIN('a') &! вернёт минимальное из числовых значений элементов массива "a" | MIN('a') &! вернёт минимальное из числовых значений элементов массива "a" | ||
MIN('$b') &! вернёт минимальное из текстовых значений элементов массива "$b" | MIN('$b') &! вернёт минимальное из текстовых значений элементов массива "$b" | ||
MIN('%d') &! вернёт минимальный из кортежей в массиве '%d' | MIN('%d') &! вернёт минимальный из кортежей в массиве '%d' | ||
</sxh> | </sxh> | ||
- | * ''%%ARRCOMP([$имя_массива],[$шаблон],[#начало])%%'' - возвращает номер элемента массива ''%%[$имя_массива]%%'', соответствующего регулярному выражению ''%%[$шаблон]%%''. Поиск начинается с элемента с номером ''%%[#начало]%%''; индексация элементов массива ведётся с нуля. Если указанное значение не найдено, функция возвращает ''%%-1%%''. | + | * ''**ARRCOMP(**[$имя_массива],[$шаблон],[#начало]**)**'' - возвращает номер элемента массива ''%%[$имя_массива]%%'', соответствующего регулярному выражению ''%%[$шаблон]%%''. Поиск начинается с элемента с номером ''%%[#начало]%%''; индексация элементов массива ведётся с нуля. Если указанное значение не найдено, функция возвращает ''%%-1%%''. |
* Поиск работает только по текстовым массивам (символ ''%%$%%'' в названии массива можно опустить). | * Поиск работает только по текстовым массивам (символ ''%%$%%'' в названии массива можно опустить). | ||
* Параметр ''%%[#начало]%%'' может отсутствовать, при этом он принимается равным ''%%0%%''. | * Параметр ''%%[#начало]%%'' может отсутствовать, при этом он принимается равным ''%%0%%''. |