Browse Source

Add Dictionary.merge()

kobewi 3 years ago
parent
commit
a0915e6dee

+ 8 - 0
core/variant/dictionary.cpp

@@ -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()) {

+ 1 - 0
core/variant/dictionary.h

@@ -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;

+ 1 - 0
core/variant/variant_call.cpp

@@ -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());

+ 8 - 0
doc/classes/Dictionary.xml

@@ -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>