У меня есть массив объектов. Каждый объект имеет атрибут цвета, который может быть «красным», «синим», «желтым», «зеленым», «оранжевым» или «фиолетовым». В массиве 20-30 объектов, поэтому цвета повторяются. Моя цель - отсортировать массив так, чтобы цвета не были рядом друг с другом. Распределение цветов не совсем ровное, но близкое.
Это то, что я имею до сих пор. Он проверяет следующий и предыдущий объект на совпадение цветов и, если он находит совпадение, перемещает его в конец массива.
private function sortColors():void
{
var getNext:uint;
var getPrev:uint;
var maxCount:uint = colorArray.length;
for (var i:uint = 0; i < maxCount; i++) {
var cur:ValueObject = colorArray[i];
(i == maxCount-1) ? getNext = 0 : getNext = i+1;
(i == 0) ? getPrev = maxCount-1 : getPrev = i-1;
var next:ValueObject = colorArray[getNext];
var prev:ValueObject = colorArray[getPrev];
if (cur.color == next.color) {
var move:ValueObject = colorArray[getNext];
colorArray.splice(getNext, 1);
colorArray.push(move);
}
if (cur.color == prev.color) {
var move:ValueObject = colorArray[getPrev];
colorArray.splice(getPrev, 1);
colorArray.push(move);
}
}
}
Это работает нормально, но если есть больше определенного цвета, они заканчивают тем, что повторяются в конце. Я мог бы добавить что-то в конец, чтобы бросить их обратно в микс, но я чувствую, что должен быть лучший способ. Кто-то просветил меня.