Когда в слиянии возникает конфликт ключей, сейчас вы просто отбрасываете один и оставляете другой, поэтому, если это фактически два разных объекта, вы всегда потеряете некоторую информацию.В случае, если сами объекты являются хеш-таблицами или массивами, это, конечно, остается верным, поэтому для того, чтобы справиться с этим, вам нужно решить, какие типы вы хотите обрабатывать специальной логикой слияния.
В случае хеш-таблиц вы можете рекурсивно вызывать свою собственную функцию.Вам понадобится параметр уровня, чтобы ограничить, насколько далеко вы можете набирать и / или обрабатывать циклические ссылки.
Для массивов вы можете просто сложить их вместе.
Чтобы определить, принадлежит ли объект определенному типу, используйте оператор -is
.
Это будет усложнено, если значения не одного типа, например, если одно из них - [hashtable]
, а одно из [string]
.Как вы их объединяете?
Возможно, вы захотите дополнительно обрабатывать несколько типов словарей и сборников для комбинации, в этом случае вы можете использовать оператор -is
с интерфейсами, например:
if ($NewTable[$Key] -is [System.Collections.IDictionary]) {
# handle combining dictionaries
}
И аналогично с ICollection
и тому подобное.
Если у вас очень ограниченная область применения этой функции, и вы можете делать предположения о том, что ожидается в значениях, которые вам могут быть легче, на самом деле зависит от ваших вариантов использования.