![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 25
|
есть массив
нужно из этого получить(создать новый или как то из этого удалить) массив с не повторяющимся значениями... Заранее спасибо! |
|
|||||
|
[+1 10.12.10]
|
var test:Array = [1, 1, 99,5,60,0,0,2,0,10,10,1,99, 2,45,2]; trace( "test : " , test ); for (var i:int = 0; i < test.length; i++) { for (var j:int = 0; j < test.length; j++) { if (i!= j && test[i] == test[j]) { test.splice(j, 1); i--; } } } trace("test : ",test, "len:", test.length); //test : 1,99,5,6,0,2,10,45 len: 8 Последний раз редактировалось murz; 20.01.2010 в 23:55. |
|
|||||
|
Modus ponens
|
Вы о чем это вообще...
var test:Array = [1, 2, 7, 3, 4, 1, 8, 5, 6, 2, 7, 8, 9, 4]; var i:int = test.length; var val:int; var j:int; var result:Array = []; while (i--) { val = test[i]; if (result.indexOf(val) > -1) continue; result.push(val); } trace(result); Если извесно, что повторяющиеся значения однотипные (т.е. например массив содержит много единиц, а все остальные значения всегда уникальные), то можно это оптимизировать записывая найденные неуникальные значения в Dictionary и проверять их соответственно.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 21.01.2010 в 00:14. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
![]() var test:Array = []; for (var i:int = 0; i < 1e5; i++) { test.push(Math.floor(Math.random() * 10000)); } var t:Number = getTimer(); var o:Object = {}; test = test.filter(callback); o = null; trace(test.length, getTimer() - t); // 9999 23 function callback(item:*, index:int, array:Array):Boolean { return o[item] ? false : o[item] = true; } |
|
|||||
|
|
|
|||||
|
Регистрация: Jan 2010
Сообщений: 25
|
большое всем спасибо !!!
|
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
var test:Array = []; for (var i:int = 0; i < 1e5; i++) { test.push(Math.floor(Math.random() * 10000)); } var t:Number = getTimer(); var o:Object = {}; test = test.filter(callback); o = null; trace(getTimer() - t); // 21 function callback(item:*, index:int, array:Array):Boolean { return o[item] ? false : o[item] = true; } var test:Array = []; for (var i:int = 0; i < 1e5; i++) { test.push(Math.floor(Math.random() * 10000)); } var t:Number = getTimer(); i = test.length; var val:int; var j:int; var result:Array = []; while (i--) { val = test[i]; if (result.indexOf(val) > -1) continue; result.push(val); } trace(getTimer() - t); // 5296 var test:Array = []; for (var i:int = 0; i < 1e5; i++) { test.push(Math.floor(Math.random() * 10000)); } var t:Number = getTimer(); test = removeDuplicates(test); trace(getTimer() - t); // 9634 function removeDuplicates(inArray : Array) : Array { return inArray.filter(_removeDuplicatesFilter); } function _removeDuplicatesFilter(e : *, i : int, inArray : Array) : Boolean { return (i == 0) ? true : inArray.lastIndexOf(e, i - 1) == -1; } var test:Array = []; for (var i:int = 0; i < 1e5; i++)a { test.push(Math.floor(Math.random() * 10000)); } var t:Number = getTimer(); for (i = 0; i < test.length; i++) { for (var j:int = 0; j < test.length; j++) { if (i!= j && test[i] == test[j]) { test.splice(j, 1); i--; } } } trace(getTimer() - t); // Error: Error #1502: A script has executed for longer than the default timeout period of 15 seconds. |
|
|||||
|
Modus ponens
|
@udaaff:
На самом деле тест необъективный, очень много зависит от того, какие именно значения находятся в массиве и как они расположены. Т.е. рандомальные в большей части уникальные значения дадут разную производительность для разных алгоритмов, но, при этом, если, например взять массив, в котором повторяющиеся элементы однотипные, и они сгруппированы ближе к концу массива, то результат может оказаться вообще совсем другим для тех же алгоритмов. В каждом конкретном случае надо искать подходящее к ситуации решение. Ну и есть, конечно заведомо неоптимизированые решения, типа с вложеным циклом.
__________________
Hell is the possibility of sanity |
|
|||||
|
[+1 19.06.10]
[+1 27.07.10] Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
|
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 20:23. |
|
|
« Предыдущая тема | Следующая тема » |
|
|