Replace XML codeblock spaces with tabs
This commit is contained in:
@@ -57,13 +57,13 @@
|
||||
extends Node
|
||||
|
||||
class Stats:
|
||||
pass
|
||||
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]
|
||||
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]
|
||||
[/codeblock]
|
||||
The [param base] array's elements are converted when necessary. If this is not possible or [param base] is already typed, this constructor fails and returns an empty [Array].
|
||||
In GDScript, this constructor is usually not necessary, as it is possible to create a typed array through static typing:
|
||||
@@ -164,36 +164,36 @@
|
||||
[codeblocks]
|
||||
[gdscript]
|
||||
func greater_than_5(number):
|
||||
return number > 5
|
||||
return number > 5
|
||||
|
||||
func _ready():
|
||||
print([6, 10, 6].all(greater_than_5)) # Prints true (3/3 elements evaluate to true).
|
||||
print([4, 10, 4].all(greater_than_5)) # Prints false (1/3 elements evaluate to true).
|
||||
print([4, 4, 4].all(greater_than_5)) # Prints false (0/3 elements evaluate to true).
|
||||
print([].all(greater_than_5)) # Prints true (0/0 elements evaluate to true).
|
||||
print([6, 10, 6].all(greater_than_5)) # Prints true (3/3 elements evaluate to true).
|
||||
print([4, 10, 4].all(greater_than_5)) # Prints false (1/3 elements evaluate to true).
|
||||
print([4, 4, 4].all(greater_than_5)) # Prints false (0/3 elements evaluate to true).
|
||||
print([].all(greater_than_5)) # Prints true (0/0 elements evaluate to true).
|
||||
|
||||
# Same as the first line above, but using a lambda function.
|
||||
print([6, 10, 6].all(func(element): return element > 5)) # Prints true
|
||||
# Same as the first line above, but using a lambda function.
|
||||
print([6, 10, 6].all(func(element): return element > 5)) # Prints true
|
||||
[/gdscript]
|
||||
[csharp]
|
||||
private static bool GreaterThan5(int number)
|
||||
{
|
||||
return number > 5;
|
||||
return number > 5;
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
// Prints True (3/3 elements evaluate to true).
|
||||
GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }.All(GreaterThan5));
|
||||
// Prints False (1/3 elements evaluate to true).
|
||||
GD.Print(new Godot.Collections.Array>int< { 4, 10, 4 }.All(GreaterThan5));
|
||||
// Prints False (0/3 elements evaluate to true).
|
||||
GD.Print(new Godot.Collections.Array>int< { 4, 4, 4 }.All(GreaterThan5));
|
||||
// Prints True (0/0 elements evaluate to true).
|
||||
GD.Print(new Godot.Collections.Array>int< { }.All(GreaterThan5));
|
||||
// Prints True (3/3 elements evaluate to true).
|
||||
GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }.All(GreaterThan5));
|
||||
// Prints False (1/3 elements evaluate to true).
|
||||
GD.Print(new Godot.Collections.Array>int< { 4, 10, 4 }.All(GreaterThan5));
|
||||
// Prints False (0/3 elements evaluate to true).
|
||||
GD.Print(new Godot.Collections.Array>int< { 4, 4, 4 }.All(GreaterThan5));
|
||||
// Prints True (0/0 elements evaluate to true).
|
||||
GD.Print(new Godot.Collections.Array>int< { }.All(GreaterThan5));
|
||||
|
||||
// Same as the first line above, but using a lambda function.
|
||||
GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }.All(element => element > 5)); // Prints True
|
||||
// Same as the first line above, but using a lambda function.
|
||||
GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }.All(element => element > 5)); // Prints True
|
||||
}
|
||||
[/csharp]
|
||||
[/codeblocks]
|
||||
@@ -210,16 +210,16 @@
|
||||
The [param method] should take one [Variant] parameter (the current array element) and return a [bool].
|
||||
[codeblock]
|
||||
func greater_than_5(number):
|
||||
return number > 5
|
||||
return number > 5
|
||||
|
||||
func _ready():
|
||||
print([6, 10, 6].any(greater_than_5)) # Prints true (3 elements evaluate to true).
|
||||
print([4, 10, 4].any(greater_than_5)) # Prints true (1 elements evaluate to true).
|
||||
print([4, 4, 4].any(greater_than_5)) # Prints false (0 elements evaluate to true).
|
||||
print([].any(greater_than_5)) # Prints false (0 elements evaluate to true).
|
||||
print([6, 10, 6].any(greater_than_5)) # Prints true (3 elements evaluate to true).
|
||||
print([4, 10, 4].any(greater_than_5)) # Prints true (1 elements evaluate to true).
|
||||
print([4, 4, 4].any(greater_than_5)) # Prints false (0 elements evaluate to true).
|
||||
print([].any(greater_than_5)) # Prints false (0 elements evaluate to true).
|
||||
|
||||
# Same as the first line above, but using a lambda function.
|
||||
print([6, 10, 6].any(func(number): return number > 5)) # Prints true
|
||||
# Same as the first line above, but using a lambda function.
|
||||
print([6, 10, 6].any(func(number): return number > 5)) # Prints true
|
||||
[/codeblock]
|
||||
See also [method all], [method filter], [method map] and [method reduce].
|
||||
[b]Note:[/b] Unlike relying on the size of an array returned by [method filter], this method will return as early as possible to improve performance (especially with large arrays).
|
||||
@@ -292,23 +292,23 @@
|
||||
If [param before] is [code]true[/code] (as by default), the returned index comes before all existing elements equal to [param value] in the array.
|
||||
[codeblock]
|
||||
func sort_by_amount(a, b):
|
||||
if a[1] < b[1]:
|
||||
return true
|
||||
return false
|
||||
if a[1] < b[1]:
|
||||
return true
|
||||
return false
|
||||
|
||||
func _ready():
|
||||
var my_items = [["Tomato", 2], ["Kiwi", 5], ["Rice", 9]]
|
||||
var my_items = [["Tomato", 2], ["Kiwi", 5], ["Rice", 9]]
|
||||
|
||||
var apple = ["Apple", 5]
|
||||
# "Apple" is inserted before "Kiwi".
|
||||
my_items.insert(my_items.bsearch_custom(apple, sort_by_amount, true), apple)
|
||||
var apple = ["Apple", 5]
|
||||
# "Apple" is inserted before "Kiwi".
|
||||
my_items.insert(my_items.bsearch_custom(apple, sort_by_amount, true), apple)
|
||||
|
||||
var banana = ["Banana", 5]
|
||||
# "Banana" is inserted after "Kiwi".
|
||||
my_items.insert(my_items.bsearch_custom(banana, sort_by_amount, false), banana)
|
||||
var banana = ["Banana", 5]
|
||||
# "Banana" is inserted after "Kiwi".
|
||||
my_items.insert(my_items.bsearch_custom(banana, sort_by_amount, false), banana)
|
||||
|
||||
# Prints [["Tomato", 2], ["Apple", 5], ["Kiwi", 5], ["Banana", 5], ["Rice", 9]]
|
||||
print(my_items)
|
||||
# Prints [["Tomato", 2], ["Apple", 5], ["Kiwi", 5], ["Banana", 5], ["Rice", 9]]
|
||||
print(my_items)
|
||||
[/codeblock]
|
||||
[b]Note:[/b] Calling [method bsearch_custom] on an [i]unsorted[/i] array will result in unexpected behavior. Use [method sort_custom] with [param func] before calling this method.
|
||||
</description>
|
||||
@@ -384,13 +384,13 @@
|
||||
The [param method] receives one of the array elements as an argument, and should return [code]true[/code] to add the element to the filtered array, or [code]false[/code] to exclude it.
|
||||
[codeblock]
|
||||
func is_even(number):
|
||||
return number % 2 == 0
|
||||
return number % 2 == 0
|
||||
|
||||
func _ready():
|
||||
print([1, 4, 5, 8].filter(is_even)) # Prints [4, 8]
|
||||
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))
|
||||
# Same as above, but using a lambda function.
|
||||
print([1, 4, 5, 8].filter(func(number): return number % 2 == 0))
|
||||
[/codeblock]
|
||||
See also [method any], [method all], [method map] and [method reduce].
|
||||
</description>
|
||||
@@ -416,10 +416,10 @@
|
||||
[codeblocks]
|
||||
[gdscript]
|
||||
func is_even(number):
|
||||
return number % 2 == 0
|
||||
return number % 2 == 0
|
||||
|
||||
func _ready():
|
||||
print([1, 3, 4, 7].find_custom(is_even.bind())) # Prints 2
|
||||
print([1, 3, 4, 7].find_custom(is_even.bind())) # Prints 2
|
||||
[/gdscript]
|
||||
[/codeblocks]
|
||||
</description>
|
||||
@@ -481,7 +481,7 @@
|
||||
In GDScript, this is equivalent to the [code]in[/code] operator:
|
||||
[codeblock]
|
||||
if 4 in [2, 4, 6, 8]:
|
||||
print("4 is here!") # Will be printed.
|
||||
print("4 is here!") # Will be printed.
|
||||
[/codeblock]
|
||||
[b]Note:[/b] For performance reasons, the search is affected by the [param value]'s [enum Variant.Type]. For example, [code]7[/code] ([int]) and [code]7.0[/code] ([float]) are not considered equal for this method.
|
||||
</description>
|
||||
@@ -549,13 +549,13 @@
|
||||
The [param method] should take one [Variant] parameter (the current array element) and can return any [Variant].
|
||||
[codeblock]
|
||||
func double(number):
|
||||
return number * 2
|
||||
return number * 2
|
||||
|
||||
func _ready():
|
||||
print([1, 2, 3].map(double)) # Prints [2, 4, 6]
|
||||
print([1, 2, 3].map(double)) # Prints [2, 4, 6]
|
||||
|
||||
# Same as above, but using a lambda function.
|
||||
print([1, 2, 3].map(func(element): return element * 2))
|
||||
# Same as above, but using a lambda function.
|
||||
print([1, 2, 3].map(func(element): return element * 2))
|
||||
[/codeblock]
|
||||
See also [method filter], [method reduce], [method any] and [method all].
|
||||
</description>
|
||||
@@ -635,36 +635,36 @@
|
||||
The [param method] takes two arguments: the current value of [param accum] and the current array element. If [param accum] is [code]null[/code] (as by default), the iteration will start from the second element, with the first one used as initial value of [param accum].
|
||||
[codeblock]
|
||||
func sum(accum, number):
|
||||
return accum + number
|
||||
return accum + number
|
||||
|
||||
func _ready():
|
||||
print([1, 2, 3].reduce(sum, 0)) # Prints 6
|
||||
print([1, 2, 3].reduce(sum, 10)) # Prints 16
|
||||
print([1, 2, 3].reduce(sum, 0)) # Prints 6
|
||||
print([1, 2, 3].reduce(sum, 10)) # Prints 16
|
||||
|
||||
# Same as above, but using a lambda function.
|
||||
print([1, 2, 3].reduce(func(accum, number): return accum + number, 10))
|
||||
# Same as above, but using a lambda function.
|
||||
print([1, 2, 3].reduce(func(accum, number): return accum + number, 10))
|
||||
[/codeblock]
|
||||
If [method max] is not desirable, this method may also be used to implement a custom comparator:
|
||||
[codeblock]
|
||||
func _ready():
|
||||
var arr = [Vector2i(5, 0), Vector2i(3, 4), Vector2i(1, 2)]
|
||||
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) # Prints (3, 4)
|
||||
var longest_vec = arr.reduce(func(max, vec): return vec if is_length_greater(vec, max) else max)
|
||||
print(longest_vec) # Prints (3, 4)
|
||||
|
||||
func is_length_greater(a, b):
|
||||
return a.length() > b.length()
|
||||
return a.length() > b.length()
|
||||
[/codeblock]
|
||||
This method can also be used to count how many elements in an array satisfy a certain condition, similar to [method count]:
|
||||
[codeblock]
|
||||
func is_even(number):
|
||||
return number % 2 == 0
|
||||
return number % 2 == 0
|
||||
|
||||
func _ready():
|
||||
var arr = [1, 2, 3, 4, 5]
|
||||
# If the current element is even, increment count, otherwise leave count the same.
|
||||
var even_count = arr.reduce(func(count, next): return count + 1 if is_even(next) else count, 0)
|
||||
print(even_count) # Prints 2
|
||||
var arr = [1, 2, 3, 4, 5]
|
||||
# If the current element is even, increment count, otherwise leave count the same.
|
||||
var even_count = arr.reduce(func(count, next): return count + 1 if is_even(next) else count, 0)
|
||||
print(even_count) # Prints 2
|
||||
[/codeblock]
|
||||
See also [method map], [method filter], [method any], and [method all].
|
||||
</description>
|
||||
@@ -781,18 +781,18 @@
|
||||
[param func] is called as many times as necessary, receiving two array elements as arguments. The function should return [code]true[/code] if the first element should be moved [i]before[/i] the second one, otherwise it should return [code]false[/code].
|
||||
[codeblock]
|
||||
func sort_ascending(a, b):
|
||||
if a[1] < b[1]:
|
||||
return true
|
||||
return false
|
||||
if a[1] < b[1]:
|
||||
return true
|
||||
return false
|
||||
|
||||
func _ready():
|
||||
var my_items = [["Tomato", 5], ["Apple", 9], ["Rice", 4]]
|
||||
my_items.sort_custom(sort_ascending)
|
||||
print(my_items) # Prints [["Rice", 4], ["Tomato", 5], ["Apple", 9]]
|
||||
var my_items = [["Tomato", 5], ["Apple", 9], ["Rice", 4]]
|
||||
my_items.sort_custom(sort_ascending)
|
||||
print(my_items) # Prints [["Rice", 4], ["Tomato", 5], ["Apple", 9]]
|
||||
|
||||
# Sort descending, using a lambda function.
|
||||
my_items.sort_custom(func(a, b): return a[1] > b[1])
|
||||
print(my_items) # Prints [["Apple", 9], ["Tomato", 5], ["Rice", 4]]
|
||||
# Sort descending, using a lambda function.
|
||||
my_items.sort_custom(func(a, b): return a[1] > b[1])
|
||||
print(my_items) # Prints [["Apple", 9], ["Tomato", 5], ["Rice", 4]]
|
||||
[/codeblock]
|
||||
It may also be necessary to use this method to sort strings by natural order, with [method String.naturalnocasecmp_to], as in the following example:
|
||||
[codeblock]
|
||||
|
||||
Reference in New Issue
Block a user