Add Dictionary.merge()

This commit is contained in:
kobewi 2022-04-04 18:46:55 +02:00
parent 3aa83a0235
commit a0915e6dee
4 changed files with 18 additions and 0 deletions

View file

@ -269,6 +269,14 @@ void Dictionary::clear() {
_p->variant_map.clear();
}
void Dictionary::merge(const Dictionary &p_dictionary, bool p_overwrite) {
for (const KeyValue<Variant, Variant> &E : p_dictionary._p->variant_map) {
if (p_overwrite || !has(E.key)) {
this->operator[](E.key) = E.value;
}
}
}
void Dictionary::_unref() const {
ERR_FAIL_COND(!_p);
if (_p->refcount.unref()) {

View file

@ -62,6 +62,7 @@ public:
int size() const;
bool is_empty() const;
void clear();
void merge(const Dictionary &p_dictionary, bool p_overwrite = false);
bool has(const Variant &p_key) const;
bool has_all(const Array &p_keys) const;

View file

@ -1808,6 +1808,7 @@ static void _register_variant_builtin_methods() {
bind_method(Dictionary, size, sarray(), varray());
bind_method(Dictionary, is_empty, sarray(), varray());
bind_method(Dictionary, clear, sarray(), varray());
bind_method(Dictionary, merge, sarray("dictionary", "overwrite"), varray(false));
bind_method(Dictionary, has, sarray("key"), varray());
bind_method(Dictionary, has_all, sarray("keys"), varray());
bind_method(Dictionary, erase, sarray("key"), varray());

View file

@ -291,6 +291,14 @@
Returns the list of keys in the [Dictionary].
</description>
</method>
<method name="merge">
<return type="void" />
<argument index="0" name="dictionary" type="Dictionary" />
<argument index="1" name="overwrite" type="bool" default="false" />
<description>
Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, duplicate keys will not be copied over, unless [code]overwrite[/code] is [code]true[/code].
</description>
</method>
<method name="size" qualifiers="const">
<return type="int" />
<description>