Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Array
Вбудована структура даних, яка містить послідовність елементів.
Опис
An array data structure that can contain a sequence of elements of any Variant type by default. Values can optionally be constrained to a specific type by creating a typed array. Elements are accessed by a numerical index starting at 0. Negative indices are used to count from the back (-1 is the last element, -2 is the second to last, etc.).
var array = ["First", 2, 3, "Last"]
print(array[0]) # Prints "First"
print(array[2]) # Prints 3
print(array[-1]) # Prints "Last"
array[1] = "Second"
print(array[1]) # Prints "Second"
print(array[-3]) # Prints "Second"
# This typed array can only contain integers.
# Attempting to add any other type will result in an error.
var typed_array: Array[int] = [1, 2, 3]
Godot.Collections.Array array = ["First", 2, 3, "Last"];
GD.Print(array[0]); // Prints "First"
GD.Print(array[2]); // Prints 3
GD.Print(array[^1]); // Prints "Last"
array[1] = "Second";
GD.Print(array[1]); // Prints "Second"
GD.Print(array[^3]); // Prints "Second"
// This typed array can only contain integers.
// Attempting to add any other type will result in an error.
Godot.Collections.Array<int> typedArray = [1, 2, 3];
Note: Arrays are always passed by reference. To get a copy of an array that can be modified independently of the original array, use duplicate().
Note: Erasing elements while iterating over arrays is not supported and will result in unpredictable behavior.
Note: In a boolean context, an array will evaluate to false if it's empty ([]). Otherwise, an array will always evaluate to true.
Differences between packed arrays, typed arrays, and untyped arrays: Packed arrays are generally faster to iterate on and modify compared to a typed array of the same type (e.g. PackedInt64Array versus Array[int]). Also, packed arrays consume less memory. As a downside, packed arrays are less flexible as they don't offer as many convenience methods such as map(). Typed arrays are in turn faster to iterate on and modify than untyped arrays.
Примітка
Існують значні відмінності при використанні цього API із С#. Більше інформації: ref:doc_c_sharp_differences.
Конструктори
Array() |
|
Array(base: Array, type: int, class_name: StringName, script: Variant) |
|
Array(from: PackedByteArray) |
|
Array(from: PackedColorArray) |
|
Array(from: PackedFloat32Array) |
|
Array(from: PackedFloat64Array) |
|
Array(from: PackedInt32Array) |
|
Array(from: PackedInt64Array) |
|
Array(from: PackedStringArray) |
|
Array(from: PackedVector2Array) |
|
Array(from: PackedVector3Array) |
|
Array(from: PackedVector4Array) |
Методи
void |
append(value: Variant) |
void |
append_array(array: Array) |
void |
|
Variant |
back() const |
bsearch_custom(value: Variant, func: Callable, before: bool = true) const |
|
void |
clear() |
count(value: Variant) const |
|
duplicate_deep(deep_subresources_mode: int = 1) const |
|
void |
erase(value: Variant) |
void |
fill(value: Variant) |
find_custom(method: Callable, from: int = 0) const |
|
Variant |
front() const |
Variant |
|
get_typed_builtin() const |
|
StringName |
get_typed_class_name() const |
Variant |
get_typed_script() const |
has(value: Variant) const |
|
hash() const |
|
is_empty() const |
|
is_read_only() const |
|
is_same_typed(array: Array) const |
|
is_typed() const |
|
void |
|
Variant |
max() const |
Variant |
min() const |
Variant |
pick_random() const |
Variant |
|
Variant |
pop_back() |
Variant |
|
void |
push_back(value: Variant) |
void |
push_front(value: Variant) |
Variant |
|
void |
|
void |
reverse() |
rfind_custom(method: Callable, from: int = -1) const |
|
void |
|
void |
shuffle() |
size() const |
|
slice(begin: int, end: int = 2147483647, step: int = 1, deep: bool = false) const |
|
void |
sort() |
void |
sort_custom(func: Callable) |
Оператори
operator !=(right: Array) |
|
operator +(right: Array) |
|
operator <(right: Array) |
|
operator <=(right: Array) |
|
operator ==(right: Array) |
|
operator >(right: Array) |
|
operator >=(right: Array) |
|
Variant |
operator [](index: int) |
Описи конструкторів
Створює пустий Array.
Array Array(base: Array, type: int, class_name: StringName, script: Variant)
Створює типізований масив із масиву base. Типізований масив може містити лише елементи заданого типу або ті, що успадковуються від заданого класу, як описано в параметрах цього конструктора:
typeє вбудованим типом Variant, як одна з констант Variant.Type.
class_name— вбудоване ім’я класу (див. Object.get_class()).
scriptпов’язаний скрипти. Це має бути екземпляр Script абоnull.Якщо
typeне є @GlobalScope.TYPE_OBJECT,class_nameмає бути порожнім StringName, аscriptмає мати значенняnull.
class_name Sword
extends Node
class Stats:
pass
func _ready():
var a = Array([], TYPE_INT, "", null) # Array[int]
var b = Array([], TYPE_OBJECT, "Node", null) # Array[Node]
var c = Array([], TYPE_OBJECT, "Node", Sword) # Array[Sword]
var d = Array([], TYPE_OBJECT, "RefCounted", Stats) # Array[Stats]
За потреби елементи масиву ``base`` перетворюються. Якщо це неможливо або ``base`` уже введено, цей конструктор завершується помилкою та повертає порожній **Array**.
У GDScript цей конструктор зазвичай не потрібний, оскільки можна створити типізований масив за допомогою статичної типізації:
var numbers: Array[float] = []
var children: Array[Node] = [$Node, $Sprite2D, $RigidBody3D]
var integers: Array[int] = [0.2, 4.5, -2.0]
print(integers) # Виводить [0, 4, -2]
Повертає той самий масив, що й from. Якщо вам потрібна копія масиву, використовуйте duplicate().
Array Array(from: PackedByteArray)
Створює масив із PackedByteArray.
Array Array(from: PackedColorArray)
Створює масив із PackedColorArray.
Array Array(from: PackedFloat32Array)
Створює масив із PackedFloat32Array.
Array Array(from: PackedFloat64Array)
Створює масив із PackedFloat64Array.
Array Array(from: PackedInt32Array)
Створює масив із PackedInt32Array.
Array Array(from: PackedInt64Array)
Створює масив із PackedInt64Array.
Array Array(from: PackedStringArray)
Створює масив із PackedStringArray.
Array Array(from: PackedVector2Array)
Створює масив із PackedVector2Array.
Array Array(from: PackedVector3Array)
Створює масив із PackedVector3Array.
Array Array(from: PackedVector4Array)
Створює масив із PackedVector4Array.
Описи методів
bool all(method: Callable) const 🔗
Викликає заданий Callable для кожного елемента в масиві та повертає true, якщо Callable повертає true для всіх елементів у масиві. Якщо Callable повертає false для одного або більше елементів масиву, цей метод повертає false.
method має приймати один параметр Variant (поточний елемент масиву) і повертати bool.
func greater_than_5(number):
return number > 5
func _ready():
print([6, 10, 6].all(greater_than_5)) # Виводить true (3/3 елементів оцінюються як true).
print([4, 10, 4].all(greater_than_5)) # Виводить false (1/3 елементів оцінюється як true).
print([4, 4, 4].all(greater_than_5)) # Виводить false (0/3 елементів оцінюються як true).
print([].all(greater_than_5)) # Виводить true (0/0 елементів оцінюється як true).
# Те саме, що й перший рядок вище, але з використанням лямбда-функції.
print([6, 10, 6].all(func(element): return element > 5)) # Виводить true
private static bool GreaterThan5(int number)
{
return number > 5;
}
public override void _Ready()
{
// Виводить True (3/3 елементів оцінюються як true).
GD.Print(new Godot.Collections.Array<int> { 6, 10, 6 }.All(GreaterThan5));
// Виводить False (1/3 елементів оцінюється як true).
GD.Print(new Godot.Collections.Array<int> { 4, 10, 4 }.All(GreaterThan5));
// Виводить False (0/3 елементів оцінюються як true).
GD.Print(new Godot.Collections.Array<int> { 4, 4, 4 }.All(GreaterThan5));
// Виводить True (0/0 елементів оцінюється як true).
GD.Print(new Godot.Collections.Array<int> { }.All(GreaterThan5));
// Те саме, що й перший рядок вище, але з використанням лямбда-функції.
GD.Print(new Godot.Collections.Array<int> { 6, 10, 6 }.All(element => element > 5)); // Виводить True
}
Дивіться також any(), filter(), map() і reduce().
Примітка: На відміну від перевірки розміру масиву після filter(), цей метод поверне значення якмога швидше для поліпшення швидкодії (особливо на великих масивах)
Примітка: Для порожнього масиву цей метод завжди повертає true.
bool any(method: Callable) const 🔗
Викликає наданий Callable на кожному елементі в масиві та повертає true, якщо Callable повертає true для одного чи більше елементів у масиві. Якщо Callable повертає false для всіх елементів в масиві, цей метод повертає false.
method повинен прийняти один параметр Variant (поточний елемент масиву) і повернути bool.
func more_than_5(number):
return number > 5
func _ready():
print([6, 10, 6].any(greater_than_5)) # Виведе true (3 елементи, для яких greater_than_5 - true).
print([4, 10, 4].any(greater_than_5)) # Виведе true (1 елемент, для якого greater_than_5 - true).
print([4, 4, 4].any(greater_than_5)) # Виведе false (0 елементів, для яких greater_than_5 - true).
print([].any(greater_than_5) # Виведе false (0 елементів, для яких greater_than_5 - true).
# Те ж, що й вище, тільки через лямбду.
print([6, 10, 6].any(func(number): return number > 5)) # Виведе true
Дивись також all(), filter(), map() і reduce().
Примітка: На відміну від перевірки розміру масиву після filter(), цей метод поверне значення якмога швидше для поліпшення швидкодії (особливо на великих масивах)
Примітка: Для порожніх масивів цей метод завжди повертає false.
void append(value: Variant) 🔗
Додає value в кінець масиву (псевдонім push_back()).
void append_array(array: Array) 🔗
Додає ще один array у кінець цього масиву.
var numbers = [1, 2, 3]
var extra = [4, 5, 6]
numbers.append_array(extra)
print(numbers) # Виводить [1, 2, 3, 4, 5, 6]
Присвоює цьому масиву елементи іншого array. Змінює розмір масиву відповідно до array. Виконує перетворення типів, якщо масив є типізованим.
Variant back() const 🔗
Повертає останній елемент масиву. Якщо масив порожній, не вдається і повертає null. Дивись також front().
Примітка: На відміну від ```` оператор (array[-1]), помилка генерується без виконання проекту.
int bsearch(value: Variant, before: bool = true) const 🔗
Повертає індекс value у відсортованому масиві. Якщо його не вдається знайти, повертає позицію, куди слід вставити value, щоб зберегти сортування масиву. Використовується алгоритм бінарного пошуку.
Якщо before дорівнює true (як за замовчуванням), повернений індекс знаходиться перед усіма існуючими елементами, що дорівнюють value у масиві.
var numbers = [2, 4, 8, 10]
var idx = numbers.bsearch(7)
numbers.insert(idx, 7)
print(numbers) # Виводить [2, 4, 7, 8, 10]
var fruits = ["Apple", "Lemon", "Lemon", "Orange"]
print(fruits.bsearch("Lemon", true)) # Виводить 1, вказує на перший "Lemon".
print(fruits.bsearch("Lemon", false)) # Виводить 3, вказує на "Orange".
Примітка: Виклик bsearch() для невідсортованого масиву призведе до несподіваної поведінки. Перед викликом цього методу використовуйте sort().
int bsearch_custom(value: Variant, func: Callable, before: bool = true) const 🔗
Повертає індекс value у відсортованому масиві. Якщо його неможливо знайти, повертає місце, куди слід вставити value, щоб зберегти масив упорядкованим (використовуючи func для порівняння). Використовується такий алгоритм: бінарний пошук.
Подібно до sort_custom(),
funcвикликається необхідну кількість разів, отримуючи один елемент масиву таvalueяк аргументи. Функція має повернутиtrue, якщо елемент масиву має бути позадуvalue, інакше вона має повернутиfalse.Якщо
beforeмає значенняtrue(як за замовчуванням), повернутий індекс стоїть перед усіма існуючими елементами, що дорівнюютьvalueу масиві.
func sort_by_amount(a, b):
If a[1] < b[1]:
return true
return false
func _ready():
var my_items = [["Помідор", 2], ["Ківі", 5], ["Рис", 9]]
var apple = ["Яблуко", 5]
# "Яблуко" вставляється перед "Ківі".
my_items.insert(my_items.bsearch_custom(apple, sort_by_amount, true), apple)
var banana = ["Банан", 5]
# "Банан" вставляється після "Ківі".
my_items.insert(my_items.bsearch_custom(banana, sort_by_amount, false), banana)
# Відбитки [["Помідор", 2], ["Яблуко", 5], ["Ківі", 5], ["Банан", 5], ["Рис", 9]]
print (мої_предмети)
Примітка. Виклик bsearch_custom() для несортованого масиву призведе до неочікуваної поведінки. Використовуйте sort_custom() з func перед викликом цього методу.
void clear() 🔗
Видаляє всі елементи з масиву. Це еквівалентно використанню resize() із розміром 0.
int count(value: Variant) const 🔗
Повертає кількість разів, коли елемент є в масиві.
Щоб підрахувати, скільки елементів у масиві задовольняє умову, див. reduce().
Array duplicate(deep: bool = false) const 🔗
Повертає нову копію масиву.
За замовчуванням повертається неглибока копія: усі вкладені елементи Array, Dictionary та Resource спільно використовуються з оригінальним масивом. Зміна будь-якого з них в одному масиві також вплине на них в іншому.
Якщо deep має значення true, повертається копія deep: усі вкладені масиви та словники також дублюються (рекурсивно). Однак будь-який Resource все ще використовується спільно з вихідним масивом.
Array duplicate_deep(deep_subresources_mode: int = 1) const 🔗
Дублює цей масив глибоко, подібно до duplicate() при передачі true, з додатковим контролем над обробкою підресурсів.
deep_subresources_mode має бути одним зі значень з DeepDuplicateMode. За замовчуванням (рекурсивно) будуть дублюватися лише внутрішні ресурси.
void erase(value: Variant) 🔗
Знаходить і видаляє перший елемент value з масиву. Якщо value не існує в масиві, нічого не відбувається. Щоб видалити елемент за індексом, скористайтеся remove_at().
Примітка: Цей метод пересуває індекс кожного елемента після вилученого value лівіше, що може призвести до помітної втрати швидкодії, особливо на більших масивах.
Примітка: Видалення елементів під час ітерації над масивами не підтримується і призведе до непередбачуваної поведінки.
void fill(value: Variant) 🔗
Призначає задане value всім елементам у масиві.
Цей метод часто можна комбінувати з resize() для створення масиву заданого розміру та ініціалізованих елементів:
var Array = []
array.resize(5)
array.fill(2)
print(array) # Виводить [2, 2, 2, 2, 2]
Godot.Collections.Array array = [];
array.Resize(5);
array.Fill(2);
GD.Print(масив); // Виводить [2, 2, 2, 2, 2]
Примітка: Якщо значення параметра є Variant, що передається за посиланням (похідним від об’єкта, Array, Dictionary тощо), масив буде заповнено посиланнями на те саме value, які не є дублікатами.
Array filter(method: Callable) const 🔗
Викликає задане Callable для кожного елемента масиву та повертає нове, відфільтроване значення Array.
Метод method отримує один з елементів масиву як аргумент і повинен повернути true, щоб додати елемент до відфільтрованого масиву, або false, щоб виключити його.
func is_even(number):
return number % 2 == 0
func _ready():
print([1, 4, 5, 8].filter(is_even)) # Prints [4, 8]
# Same as above, but using a lambda function.
print([1, 4, 5, 8].filter(func(number): return number % 2 == 0))
Див. також any(), all(), map() and reduce().
int find(what: Variant, from: int = 0) const 🔗
Повертає індекс першого входження what у цьому масиві або -1, якщо їх немає. Початок пошуку можна вказати за допомогою from, продовжуючи до кінця масиву.
Примітка. Якщо ви просто хочете дізнатися, чи містить масив what, використовуйте has() (Contains у C#). У GDScript ви також можете використовувати оператор in.
Примітка: З міркувань продуктивності на пошук впливає what Variant.Type. Наприклад, 7 (int) і 7.0 (float) не вважаються однаковими для цього методу.
int find_custom(method: Callable, from: int = 0) const 🔗
Returns the index of the first element in the array that causes method to return true, or -1 if there are none. The search's start can be specified with from, continuing to the end of the array.
method is a callable that takes an element of the array, and returns a bool.
Note: If you just want to know whether the array contains anything that satisfies method, use any().
func is_even(number):
return number % 2 == 0
func _ready():
print([1, 3, 4, 7].find_custom(is_even.bind())) # Prints 2
# Another example using `bind()` to pass an additional parameter:
func is_specific_number(number, expected):
return number == expected
func _ready():
print([1, 3, 4, 7].find_custom(is_specific_number.bind(4))) # Prints 2
Variant front() const 🔗
Повертає перший елемент масиву. Якщо масив порожній, не вдається і повертає null. Дивитися також back().
Примітка: На відміну від ```` оператор (array[0]), помилка генерується без виконання проекту.
Variant get(index: int) const 🔗
Повертає елемент за заданим index у масиві. Якщо index виходить за межі або є від'ємним, цей метод завершується невдачею та повертає null.
Цей метод схожий (але не ідентичний) на оператор []. Найголовніше, що коли цей метод завершується невдачею, він не призупиняє виконання проекту, якщо його запускати з редактора.
int get_typed_builtin() const 🔗
Повертає вбудований тип Variant типізованого масиву як константу Variant.Type. Якщо масив нетипізований, повертає @GlobalScope.TYPE_NIL. Дивіться також is_typed().
StringName get_typed_class_name() const 🔗
Повертає вбудовану назву класу введеного масиву, якщо вбудований Variant тип @GlobalScope.TYPE_OBJECT. В іншому випадку повертає порожній StringName. Дивіться також is_typed() і Object.get_class().
Variant get_typed_script() const 🔗
Повертає екземпляр Script, пов’язаний із цим введеним масивом, або null, якщо він не існує. Дивіться також is_typed().
bool has(value: Variant) const 🔗
Повертає true, якщо масив містить задане value.
[gdscript]
print(["усередині", 7].has("усередині")) # Виводить true
print(["усередині", 7].has("ззовні")) # Виводить false
print(["усередині", 7].has(7)) # Виводить true
print(["усередині", 7].has("7")) # Виводить false
[/gdscript]
[csharp]
var arr = new Godot.Collections.Array { "усередині", 7 };
// За конвенціями C# цей метод перейменовано на `Contains`.
GD.Print(arr.Contains("усередині")); // Виводить true
GD.Print(arr.Contains("ззовні")); // Виводить false
GD.Print(arr.Contains(7)); // Виводить true
GD.Print(arr.Contains("7")); // Виводить false
[/csharp][/codeblocks]
У GDScript це еквівалентно оператору [code]in[/code]:
- [codeblock]
- if 4 in [2, 4, 6, 8]:
print("4 тут!") # Буде надруковано.
Примітка: З міркувань продуктивності на пошук впливає тип Variant.Type для value. Наприклад, 7 (int) і 7.0 (float) не вважаються однаковими для цього методу.
Повертає хешоване 32-бітове ціле число, що представляє масив та його вміст.
Примітка: Масиви з однаковими хеш-значеннями не гарантовано будуть однаковими через колізії хеш-значень. Навпаки, масиви з різними хеш-значеннями гарантовано будуть різними.
int insert(position: int, value: Variant) 🔗
Вставляє новий елемент (value) в даний індекс (position) у масів. позиція параметра повинна бути між 0 і величиною методу матри. Якщо негативний, позиція параму розглядається відносно кінця масіва.
Повертає @GlobalScope.OK на успіх, або одну з інших Error константи в разі невдачі цього методу.
Приміток: Індекс кожного елементу після position повинен бути перенесений вперед, що може привести до помітних витрат на ефективність, особливо на більших масівах.
Повертає true, якщо масив порожній ([]). Дивіться також size().
Повертає true, якщо масив прочитаний. Переглянути make_read_only().
У GDScript, масиви автоматично читаються, якщо заявлені з const ключове слово.
bool is_same_typed(array: Array) const 🔗
Повертає true, якщо цей масив введено так само, як заданий array. Дивіться також is_typed().
Повертає true, якщо масив введено. Типізовані масиви можуть містити елементи лише певного типу, визначеного конструктором типізованого масиву. Очікується, що методи типізованого масиву повертатимуть загальний Variant.
У GDScript можна визначити типізований масив за допомогою статичної типізації:
var number: Array[float] = [0,2, 4,2, -2,0]
print(numbers.is_typed()) # Виводить true
void make_read_only() 🔗
Робить масив доступним лише для читання. Елементи масиву не можуть бути перевизначені іншими значеннями, а їх порядок не може змінитися. Не застосовується до вкладених елементів, таких як словники.
У GDScript масиви автоматично стають доступними лише для читання, якщо вони оголошені за допомогою ключового слова
const.
Array map(method: Callable) const 🔗
Дзвінки надані Callable для кожного елемента в масиві і повертає новий масив, наповнений значеннями, подані методом method.
method повинен прийняти один параметр Variant (поточний елемент масиву) і може повернути будь-який Variant.
func double(number):
return number* 2
func _ready():
print ([1, 2, 3].map(double)) # Друки [2, 4, 6]
# Так, як вище, але за допомогою функції лямбда.
print ([1, 2, 3].map(func): зворотний елемент * 2))
Дивись також filter(), reduce(), any() і all().
Variant max() const 🔗
Повертає максимальне значення, що міститься в масиві, якщо всі елементи можна порівняти. В іншому випадку повертає null. Дивіться також min().
Щоб знайти максимальне значення за допомогою спеціального компаратора, ви можете використовувати reduce().
Variant min() const 🔗
Повертає мінімальне значення, що міститься в масиві, якщо всі елементи можна порівняти. В іншому випадку повертається null. Дивитися також max().
Variant pick_random() const 🔗
Повертає випадковий елемент із масиву. Генерує помилку та повертає null, якщо масив порожній.
[gdscript]
# Може друкувати 1, 2, 3.25 або «Привіт».
print([1, 2, 3.25, "Привіт"].pick_random())
[/gdscript]
[csharp]
var array = new Godot.Collections.Array { 1, 2, 3.25f, "Привіт" };
GD.Print(array.PickRandom()); // Може друкувати 1, 2, 3.25 або "Hi".
[/csharp][/codeblocks]
[b]Примітка: [/b] Подібно до багатьох подібних функцій у системі (таких як [method @GlobalScope.randi] або [method shuffle]), цей метод використовує звичайне глобальне випадкове початкове число. Щоб отримати передбачуваний результат від цього методу, перегляньте [method @GlobalScope.seed].
Variant pop_at(position: int) 🔗
Вилучає та повертає елемент масиву за індексом position. Якщо значення від’ємне, position вважається відносно кінця масиву. Повертає null, якщо масив порожній. Якщо position виходить за межі, також генерується повідомлення про помилку.
**Примітка: ** Цей метод зсуває індекс кожного елемента після position назад, що може призвести до помітних витрат на продуктивність, особливо у великих масивах.
Variant pop_back() 🔗
Вилучає та повертає останній елемент масиву. Повертає null, якщо масив порожній, без генерування помилки. Дивіться також pop_front().
Variant pop_front() 🔗
Вилучає та повертає перший елемент масиву. Повертає null, якщо масив порожній, без генерування помилки. Дивіться також pop_back().
Примітка. Цей метод зміщує індекс кожного іншого елемента назад, що може призвести до помітних витрат на продуктивність, особливо для великих масивів.
void push_back(value: Variant) 🔗
Додає елемент в кінець масиву. Дивіться також push_front().
void push_front(value: Variant) 🔗
Додає елемент на початку масиву. Дивіться також push_back().
Примітка. Цей метод зміщує індекси кожного іншого елемента вперед, що може призвести до помітних витрат на продуктивність, особливо для великих масивів.
Variant reduce(method: Callable, accum: Variant = null) const 🔗
Викликає заданий Callable для кожного елемента в масиві, накопичує результат у accum, а потім повертає його.
Метод method приймає два аргументи: поточне значення accum і поточний елемент масиву. Якщо accum дорівнює null (як за замовчуванням), ітерація почнеться з другого елемента, а перший використовується як початкове значення accum.
func sum(accnum number):
return accnum + number
func _ready():
print([1, 2, 3].reduce(sum, 0)) # Виводить 6
print([1, 2, 3].reduce(sum, 10)) # Виводить 16
# Те саме, що й вище, але з використанням лямбда-функції.
print([1, 2, 3].reduce(func(accum, number): return accum + number, 10))
Якщо max() є небажаним, цей метод також можна використовувати для реалізації спеціального компаратора:
func _ready():
var arr = [Vector2i(5, 0), Vector2i(3, 4), Vector2i(1, 2)]
var longest_vec = arr.reduce(func(max, vec): return vec, if is_length_greater(vec, max) else max)
print(longest_vec) # Відбитки (3, 4)
func is_length_greater(a, b):
return a.length() > b.length()
Цей метод також можна використовувати для підрахунку кількості елементів у масиві, які задовольняють певну умову, подібно до count():
func is_even(number):
return number% 2 == 0
func _ready():
var arr = [1, 2, 3, 4, 5]
# Якщо поточний елемент парний, збільште кількість, інакше залиште кількість незмінною.
var even_count = arr.reduce(func(count, next): return count + 1 if is_even(next) else count, 0)
print(even_count) # Виводить 2
Див. також map(), filter(), any(), and all().
void remove_at(position: int) 🔗
Видаляє елемент з масиву за заданим індексом (position). Якщо індекс виходить за межі, цей метод не працює. Якщо індекс від'ємний, position вважається відносно кінця масиву.
Якщо вам потрібно повернути видалений елемент, використовуйте метод position]. Щоб видалити елемент за значенням, використовуйте метод erase().
Примітка: Цей метод зсуває індекс кожного елемента після position назад, що може мати помітне зниження продуктивності, особливо на більших масивах.
Встановлює кількість елементів масиву на size. Якщо size менший за поточний розмір масиву, елементи в кінці масиву видаляються. Якщо size більший, додаються нові елементи за замовчуванням (зазвичай null), залежно від типу масиву.
Повертає @GlobalScope.OK у разі успіху або одну з наступних констант Error, якщо цей метод не спрацює: @GlobalScope.ERR_LOCKED, якщо масив доступний лише для читання, @GlobalScope.ERR_INVALID_PARAMETER якщо розмір від'ємний, або @GlobalScope.ERR_OUT_OF_MEMORY, якщо розподіл пам'яті не вдався. Використовуйте size(), щоб знайти фактичний розмір масиву після зміни розміру.
Примітка: Виклик цього методу один раз і призначення нових значень відбувається швидше, ніж виклик append() для кожного нового елемента.
void reverse() 🔗
Змінює порядок усіх елементів у масиві на протилежний.
int rfind(what: Variant, from: int = -1) const 🔗
Повертає індекс останнього входження what у цьому масиві або -1, якщо їх немає. Початок пошуку можна вказати за допомогою from, продовжуючи до початку масиву. Цей метод є зворотним до find().
int rfind_custom(method: Callable, from: int = -1) const 🔗
Повертає індекс останнього елемента масиву, який змушує method повертати true або -1, якщо їх немає. Початок пошуку можна вказати за допомогою from, продовжуючи до початку масиву. Цей метод є зворотним до find_custom().
void set(index: int, value: Variant) 🔗
Встановлює значення елемента для заданого index у задане value. Це не змінить розмір масиву, це лише змінить значення за індексом, який уже є в масиві. Це те саме, що використання оператора [] (array[index] = valve).
void shuffle() 🔗
Перемішує всі елементи масиву в довільному порядку.
Примітка: Як і багато подібних функцій у системі (наприклад, @GlobalScope.randi() або pick_random()), цей метод використовує звичайне глобальне випадкове початкове число. Щоб отримати передбачуваний результат від цього методу, перегляньте @GlobalScope.seed().
Повертає кількість елементів у масиві. Порожні масиви ([]) завжди повертають 0. Дивіться також is_empty().
Array slice(begin: int, end: int = 2147483647, step: int = 1, deep: bool = false) const 🔗
Повертає новий Array, що містить елементи цього масиву, від індексу begin (включно) до end (виключно), кожен елемент step.
Якщо
beginабоendвід’ємні, їхнє значення є відносно кінця масиву.Якщо
stepє від’ємним, цей метод повторює масив у зворотному порядку, повертаючи фрагмент, упорядкований у зворотному порядку. Щоб це працювало,beginмає бути більшим заend.Якщо
deepмає значенняtrue, усі вкладені елементи Array і Dictionary у фрагменті дублюються з оригіналу рекурсивно. Дивіться також duplicate()).
var letters = ["A", "B", "C", "D", "E", "F"]
print(letters.slice(0, 2)) # Виводить ["A", "B"]
print(letters.slice(2, -2)) # Виводить ["C", "D"]
print(letters.slice(-2, 6)) # Виводить ["E", "F"]
print(letters.slice(0, 6, 2)) # Виводить ["A", "C", "E"]
print(letters.slice(4, 1, -1)) # Виводить ["E", "D", "C"]
void sort() 🔗
Сортує масив у порядку зростання. Остаточний порядок залежить від порівняння елементів оператором "менше" (<).
var numbers = [10, 5, 2.5, 8]
numbers.sort()
print(numbers) # Виводить [2.5, 5, 8, 10]
Godot.Collections.Array numbers = [10, 5, 2.5, 8];
numbers.Sort();
GD.Print(числа); // Виводить [2.5, 5, 8, 10]
Примітка: Використаний алгоритм сортування не є стабільним. Це означає, що порядок еквівалентних елементів (таких як 2 і 2.0) може змінитися під час виклику sort().
void sort_custom(func: Callable) 🔗
Сортує масив за допомогою спеціального Callable.
func викликається необхідну кількість разів, отримуючи два елементи масиву як аргументи. Функція має повернути true, якщо перший елемент потрібно перемістити перед другим, інакше вона має повернути false.
func sort_ascending(a, b):
if a[1] < b[1]:
return true
return false
func _ready():
var my_items = [["Помідор", 5], ["Яблуко", 9], ["Рис", 4]]
my_items.sort_custom(sort_ascending)
print(my_items) # Виводить [["Rice", 4], ["Tomato", 5], ["Apple", 9]]
# Сортувати за спаданням, використовуючи лямбда-функцію.
my_items.sort_custom(func(a, b): повернути a[1] > b[1])
print(my_items) # Виводить [["Apple", 9], ["Tomato", 5], ["Rice", 4]]
Також може знадобитися використовувати цей метод для сортування рядків у природному порядку за допомогою :ref:`String.naturalnocasecmp_to()<class_String_method_naturalnocasecmp_to>`, як у наступному прикладі:
var files = ["новий файл1", "новий файл2", "новий файл10", "новий файл11"]
files.sort_custom(func(a, b): return a.naturalnocasecmp_to(b) < 0)
print(files) # Виводить ["новийфайл1", "новийфайл2", "новийфайл10", "новийфайл11"]
Примітка: у C# цей метод не підтримується.
Примітка. Використаний алгоритм сортування не є стабільним. Це означає, що значення, які вважаються рівними, можуть змінити свій порядок під час виклику цього методу.
Примітка: Ви не повинні рандомізувати значення, що повертається func, оскільки алгоритм heapsort очікує узгодженого результату. Рандомізація поверненого значення призведе до неочікуваної поведінки.
Описи операторів
bool operator !=(right: Array) 🔗
Повертає true, якщо розмір масиву або його елементи відмінні від right.
Array operator +(right: Array) 🔗
Додає масив right до лівого операнда, створюючи новий Array. Це також відомо як конкатенація масиву.
var array1 = ["Один", 2]
var array2 = [3, "Чотири"]
print(array1 + array2) # Виводить ["Один", 2, 3, "Чотири"]
// Зауважте, що конкатенація неможлива з власним типом масиву C#.
var array1 = new Godot.Collections.Array{"One", 2};
var array2 = new Godot.Collections.Array{3, "Four"};
GD.Print(Areay1 + Array2); // Виводить ["One", 2, 3, "Four"]
Примітка. Для існуючих масивів append_array() набагато ефективніший, ніж конкатенація та присвоєння за допомогою оператора +=.
bool operator <(right: Array) 🔗
Порівнює елементи обох масивів по порядку, починаючи з індексу 0 і закінчуючи останнім спільним індексом обох масивів. Для кожної пари елементів повертає true, якщо елемент цього масиву менший за right, false, якщо цей елемент більший. В іншому випадку переходить до наступної пари.
Якщо всі шукані елементи рівні, повертає
true, якщо розмір цього масиву менший заright, інакше повертаєfalse.
bool operator <=(right: Array) 🔗
Порівняти елементи обох масивів для того, щоб, починаючи від індексу 0 і закінчуючи останнього індексу в загальному між масивами. Для кожної пари елементів, повертає true, якщо цей елемент масиву менше right, false, якщо цей елемент більший. В іншому випадку продовжується наступна пара.
Якщо всі пошукові елементи рівні, повертає true, якщо цей розмір масиву менше або дорівнює парам прямо, інакше повертає false.
bool operator ==(right: Array) 🔗
Порівнює лівий Array з right Array. Повертає true, якщо розміри та вміст масивів рівні, у протилежному випадку false.
bool operator >(right: Array) 🔗
Порівняти елементи обох масивів для того, щоб, починаючи від індексу 0 і закінчуючи останнього індексу в загальному між масивами. Для кожної пари елементів, повертає true, якщо цей елемент масиву перевищує right, false, якщо цей елемент менше. В іншому випадку продовжується наступна пара.
Якщо всі пошукові елементи рівні, повертає true, якщо цей розмір масиву перевищує right, інакше повертає false.
bool operator >=(right: Array) 🔗
Порівняти елементи обох масивів для того, щоб, починаючи від індексу 0 і закінчуючи останнього індексу в загальному між масивами. Для кожної пари елементів, повертає true, якщо цей елемент масиву перевищує right, false, якщо цей елемент менше. В іншому випадку продовжується наступна пара.
Якщо всі пошукові елементи рівні, повертає true, якщо цей розмір масиву більше або дорівнює парам прямо, інакше повертає false.
Variant operator [](index: int) 🔗
Повертає елемент Variant вказаний index. Початок масиву в індексі 0. Якщо index більший або рівний 0, елемент виходить від початку масиву. Якщо index є негативним значенням, елемент відступається від кінця. Доступ до масиву з-під-під ключів призведе до помилки запуску часу, призупинення виконання проекту, якщо запустити з редактора.