Чисто объедините два массива в ActionScript (3.0)?

Что хороший путь состоит в том, чтобы объединить два сортированных массива в ActionScript (конкретно ActionScript 3.0)? Полученный массив должен быть отсортирован и без дубликатов.

17
задан mellis 2 December 2008 в 20:44
поделиться

2 ответа

Для слияния (связывают) массивы, используют .concat().

Ниже два примера того, как можно связать массивы и удалить дубликаты одновременно.

более удобный способ: (можно использовать ArrayUtil.createUniqueCopy() от as3corelib)

// from as3corelib:
import com.adobe.utils.ArrayUtil;

var a1:Array = ["a", "b", "c"];
var a2:Array = ["c", "b", "x", "y"];

var c:Array = ArrayUtil.createUniqueCopy(a1.concat(a2)); // result: ["a", "b", "c", "x", "y"]

Немного более быстрый путь: (можно циклично выполниться через массивы сами и использование Array.indexOf() для проверки на дубликаты)

var a1:Array = ["a", "b", "c"];
var a2:Array = ["c", "b", "x", "y"];
var a3:Array = ["a", "x", "x", "y", "z"];

var c:Array = arrConcatUnique(a1, a2, a3); // result: ["a", "b", "c", "x", "y", "z"]

private function arrConcatUnique(...args):Array
{
    var retArr:Array = new Array();
    for each (var arg:* in args)
    {
        if (arg is Array)
        {
            for each (var value:* in arg)
            {
                if (retArr.indexOf(value) == -1)
                    retArr.push(value);
            }
        }
    }
    return retArr;
}
25
ответ дан 30 November 2019 в 12:01
поделиться

Это - вид простого алгоритма для записи. Я был бы удивлен, был ли более прямой способ сделать это в Actionscript.

function merge(a1:Array, a2:Array):Array {
    var result:Array = [];
    var i1:int = 0, i2:int = 0;

    while (i1 < a1.length && i2 < a2.length) {
        if (a1[i1] < a2[i2]) {
            result.push(a1[i1]);
            i1++;
        } else if (a2[i2] < a1[i1]) {
            result.push(a2[i2]);
            i2++;
        } else {
            result.push(a1[i1]);
            i1++;
            i2++;
        }
    }

    while (i1 < a1.length) result.push(a1[i1++]);
    while (i2 < a2.length) result.push(a2[i2++]);

    return result;
}
4
ответ дан 30 November 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: