при сравнении простых массивов я использую что-то вроде следующей функции для объединения и удаления дубликатов:
//Merge
public function merge(a1:Array, a2:Array):Array
{
var result:Array = a1.concat(a2);
var dictionary:Dictionary = new Dictionary();
for each (var item:Object in result)
dictionary[item] = true;
result = new Array();
for (var key:Object in dictionary)
result.push(key);
dictionary = null;
return result;
}
однако, этот подход не работает на сложных массивах.
существует ли хорошо известный алгоритм, или вообще возможно написать функцию рекурсии, которая может сравнивать Vector.<Object>
с другой? тот, который всегда будет работать, даже если сравниваемые объекты имеют дополнительные пары ключ / значение?
[EDIT]
, чтобы быть более ясным, используя словарь, чтобы определить, работают ли элементы в простом массиве только с примитивными типами данных (int, number, string и т. Д.) Или ссылками на объекты, поэтому приведенный выше пример работает, если передано 2 массива, напоминающих как то так:
var arr1:Array = new Array(1, 2, 3, 4, 5);
var arr2:Array = new Array(8, 7, 6, 5, 4);
, в результате чего получается объединенный массив со следующими значениями:
1, 2, 3, 8, 7, 6, 5, 4
В отличие от
, я спрашиваю, можно ли передать функции 2 сложных массива или Vector.<Object>
, все из которых содержат уникальные объекты, которые могут иметь идентичные пары ключ / значение, и удалить избыточность в результирующем Vector.<Object>
. например:
var vec1:Vector.<Object> = new Vector.<Object>();
vec1.push({city:"Montreal", country:"Canada"});
vec1.push({city:"Halifax", country:"Canada"});
var vec2:Vector.<Object> = new Vector.<Object>();
vec2.push({city:"Halifax", country:"Canada"});
vec2.push({city:"Toronto", country:"Canada"});
объединение двух вышеупомянутых векторных объектов приведет к следующему вектору путем определения и удаления объектов с одинаковыми парами ключ / значение:
{city:"Montreal", country:"Canada"}
{city:"Halifax", country:"Canada"}
{city:"Toronto", country:"Canada"}
Я ищу алгоритм, который мог бы обрабатывать удаление этих похожих объектов, не зная об их конкретных именах ключ / значение или о количестве пар ключ / значение в объекте.