1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
<?xml version="1.0" encoding="UTF-8" ?>
<class name="Dictionary" version="4.0">
<brief_description>
Dictionary type.
</brief_description>
<description>
Dictionary type. Associative container which contains values referenced by unique keys. Dictionary are composed of pairs of keys (which must be unique) and values. You can define a dictionary by placing a comma separated list of [code]key: value[/code] pairs in curly braces [code]{}[/code].
Erasing elements while iterating over them [b]is not supported[/b].
Creating a dictionary:
[codeblock]
var my_dir = {} # Creates an empty dictionary.
var points_dir = {"White": 50, "Yellow": 75, "Orange": 100}
var my_dir = {
key1: value1,
key2: value2,
key3: value3,
}
[/codeblock]
You can access values of a dictionary by referencing appropriate key in above example [code]points_dir["White"][/code] would return value of 50.
[codeblock]
export(String, "White", "Yellow", "Orange") var my_color
var points_dir = {"White": 50, "Yellow": 75, "Orange": 100}
func _ready():
var points = points_dir[my_color]
[/codeblock]
In the above code [code]points[/code] will be assigned the value that is paired with the appropriate color selected in [code]my_color[/code].
Dictionaries can contain more complex data:
[codeblock]
my_dir = {"First Array": [1, 2, 3, 4]} # Assigns an Array to a String key.
[/codeblock]
To add a key to an existing dictionary, access it like an existing key and assign to it:
[codeblock]
var points_dir = {"White": 50, "Yellow": 75, "Orange": 100}
var points_dir["Blue"] = 150 # Add "Blue" as a key and assign 150 as its value.
[/codeblock]
Finally, dictionaries can contain different types of keys and values in the same dictionary:
[codeblock]
var my_dir = {"String Key": 5, 4: [1, 2, 3], 7: "Hello"} # This is a valid dictionary.
[/codeblock]
[b]Note:[/b] Unlike [Array]s you can't compare dictionaries directly:
[codeblock]
array1 = [1, 2, 3]
array2 = [1, 2, 3]
func compare_arrays():
print(array1 == array2) # Will print true.
dir1 = {"a": 1, "b": 2, "c": 3}
dir2 = {"a": 1, "b": 2, "c": 3}
func compare_dictionaries():
print(dir1 == dir2) # Will NOT print true.
[/codeblock]
You need to first calculate the dictionary's hash with [method hash] before you can compare them:
[codeblock]
dir1 = {"a": 1, "b": 2, "c": 3}
dir2 = {"a": 1, "b": 2, "c": 3}
func compare_dictionaries():
print(dir1.hash() == dir2.hash()) # Will print true.
[/codeblock]
</description>
<tutorials>
<link>https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/gdscript_basics.html#dictionary</link>
</tutorials>
<methods>
<method name="clear">
<description>
Clear the dictionary, removing all key/value pairs.
</description>
</method>
<method name="duplicate">
<return type="Dictionary">
</return>
<argument index="0" name="deep" type="bool" default="False">
</argument>
<description>
Creates a copy of the dictionary, and returns it.
</description>
</method>
<method name="empty">
<return type="bool">
</return>
<description>
Returns [code]true[/code] if the dictionary is empty.
</description>
</method>
<method name="erase">
<return type="bool">
</return>
<argument index="0" name="key" type="Variant">
</argument>
<description>
Erase a dictionary key/value pair by key. Returns [code]true[/code] if the given key was present in the dictionary, [code]false[/code] otherwise. Does not erase elements while iterating over the dictionary.
</description>
</method>
<method name="get">
<return type="Variant">
</return>
<argument index="0" name="key" type="Variant">
</argument>
<argument index="1" name="default" type="Variant" default="Null">
</argument>
<description>
Returns the current value for the specified key in the [Dictionary]. If the key does not exist, the method returns the value of the optional default argument, or [code]null[/code] if it is omitted.
</description>
</method>
<method name="has">
<return type="bool">
</return>
<argument index="0" name="key" type="Variant">
</argument>
<description>
Returns [code]true[/code] if the dictionary has a given key.
</description>
</method>
<method name="has_all">
<return type="bool">
</return>
<argument index="0" name="keys" type="Array">
</argument>
<description>
Returns [code]true[/code] if the dictionary has all of the keys in the given array.
</description>
</method>
<method name="hash">
<return type="int">
</return>
<description>
Returns a hashed integer value representing the dictionary contents. This can be used to compare dictionaries by value:
[codeblock]
var dict1 = {0: 10}
var dict2 = {0: 10}
# The line below prints `true`, whereas it would have printed `false` if both variables were compared directly.
print(dict1.hash() == dict2.hash())
[/codeblock]
</description>
</method>
<method name="keys">
<return type="Array">
</return>
<description>
Returns the list of keys in the [Dictionary].
</description>
</method>
<method name="size">
<return type="int">
</return>
<description>
Returns the size of the dictionary (in pairs).
</description>
</method>
<method name="values">
<return type="Array">
</return>
<description>
Returns the list of values in the [Dictionary].
</description>
</method>
</methods>
<constants>
</constants>
</class>
|