|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
|
concat с удалением одинаковых элементов
есть 2 массива:
нужно объединить 2 массива и удалить оттуда одинаковые элементы, т.е. на выходе должно быть: как оптимальнее всего это сделать? сейчас сделано так: пробегаюсь по самому короткому из массивов, и ищу совпадение в другом массиве через indexOf, если нашли, то удаляем из первого, затем сцепляю оба, но думаю что можно оптимизировать
__________________
low + |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Сразу код:
var arrA:Array = [ "Item1", "Item2", "Item3", "Item4" ]; var arrB:Array = [ "Item3", "Item3", "Item4", "Item5" ]; /* // Вариант через создание нового массива var arrRes:Array = arrA.concat( arrB ); var arrFinal:Array = []; var s:String; var i:int = -1; var l:int = arrRes.length; while( ++i < l ) { s = arrRes[i]; if( arrFinal.indexOf( s ) < 0 ) arrFinal.push( s ); } trace( arrFinal ); // Item1,Item2,Item3,Item4,Item5 */ // Вариант через модификацию существующего массива var arrFinal:Array = arrA.concat( arrB ); var i:int = arrFinal.length; while( i-- ) { if( arrFinal.indexOf( arrFinal[i] ) < i ) arrFinal.splice( i, 1 ); } trace( arrFinal ); // Item1,Item2,Item3,Item4,Item5
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
скорость работы indexOf зависит от количества элементов (проверял), если их больше 100 - лучше хеш (Dictionary) использовать.
Цитата:
Последний раз редактировалось expl; 13.03.2011 в 18:07. |
|
|||||
Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
|
я не написал, что в одном массиве не может быть одинаковых элементов, т.е. такой ситуации не будет:
поэтому сливать лучше в конце, видимо это самый оптимальный способ
__________________
low + |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
|
нет, в разнобой
речь о том, что можно проверить на вхождение только один из массивов, цикл получается меньше ~в 2 раза
__________________
low + |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
тогда так:
var arrA:Array = [ "Item1", "Item2", "Item3", "Item4" ]; var arrB:Array = [ "Item3", "Item4", "Item5" ]; var i:int = arrA.length; while( i-- ) { if( arrB.indexOf( arrA[i] ) > -1 ) arrA.splice( i, 1 ); } var arrFinal:Array = arrA.concat( arrB ); trace( arrFinal ); // Item1,Item2,Item3,Item4,Item5
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
Регистрация: Mar 2009
Сообщений: 207
|
Прикольная конструкция. Возьму на вооружение, спасибо.
ЗЫ: Извиняйте, что не в тему. |
Часовой пояс GMT +4, время: 22:52. |
|
« Предыдущая тема | Следующая тема » |
|
|