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

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


help:arrays

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

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%%''​.
help/arrays.1745044914.txt.gz · Последние изменения: 2025/04/19 06:41 — aleks_versus