Здесь показаны различия между двумя версиями данной страницы.
| Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
|
help:arrays [2025/09/27 07:31] aleks_versus добавлен arrpos |
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> | ||
| Строка 463: | Строка 466: | ||
| 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%%''. | ||