много способов.Вы можете сортировать массив и перебирать его, игнорируя записи, соответствующие предыдущей итерации.Или вы можете использовать indexOf () для поиска дубликатов.Или вы можете сделать один проход по массиву, создать словарь, содержащий ключи в строках (и просто игнорировать ключи, у которых уже есть запись).
Вот способ словаря, стоимость памяти 1 логическая для каждой уникальной записи,легко на память, когда вы ожидаете много дураков, и быстро.Если у вас относительно мало дубликатов, сортировка + выборка последовательных дубликатов, вероятно, более эффективна
import flash.utils.Dictionary;
var array:Array = ["harry","potter","ron","harry","snape","ginny","ron"];
var dict:Dictionary = new Dictionary();
for (var i:int = array.length-1; i>=0; --i)
{
var str:String = array[i] as String;
trace(str);
if (!dict[str])
{
dict[str] = true;
}
else
{
array.splice(i,1);
}
}
dict = null;
trace(array);
Вот способ сортировки, но учтите: ЭТО НЕ ЗАКАЗЫВАЕТ ЗАКАЗ!Вы не сказали, имеет ли это значение.Но поскольку он использует быструю сортировку, он, как правило, имеет производительность O (N log N) плюс один дополнительный проход, если, конечно, ваши данные не являются патологическим случаем.
var array:Array = ["harry","potter","ron","harry","ron","snape","ginny","ron"];
array.sort();
trace(array);
for (var i:int = array.length-1; i>0; --i)
{
if (array[i]===array[i-1])
{
array.splice(i,1);
}
}
trace(array);
В дополнение к отсутствию указания порядкаимеет значение, вы не сказали, имеет ли значение, какой из оставленных обманщиков: тот, у которого самый низкий индекс, или последний найденный.Если это имеет значение, вам нужно изменить порядок моего словаря, чтобы он работал в противоположном направлении.Я начал в конце, потому что это позволяет делать сращивание без аннулирования количества циклов (т. Е. Путем изменения значения array.length во время цикла). Если порядок имеет значение, выполните цикл в обычном прямом направлении и скопируйте первое вхождение каждой строкив новый массив или измените счетчик цикла следующим образом.Вероятно, это метод, который я бы использовал, потому что он сохраняет порядок и сохраняет первый встреченный экземпляр каждой строки:
import flash.utils.Dictionary;
var array:Array = ["harry","potter","ron","harry","snape","ginny","ron"];
var dict:Dictionary = new Dictionary();
var len:int = array.length;
for (var i:int = 0; i<len; ++i)
{
var str:String = array[i] as String;
if (!dict[str])
{
dict[str] = true;
}
else
{
array.splice(i,1);
i--; len--;
}
}
dict = null;
trace(array);