Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.01.2010, 23:03
Ckazkatmn вне форума Посмотреть профиль Отправить личное сообщение для Ckazkatmn Найти все сообщения от Ckazkatmn
  № 1  
Ответить с цитированием
Ckazkatmn

Регистрация: Jan 2010
Сообщений: 25
По умолчанию как удалить из массива все повторяющиесся значения!!!

есть массив
Код AS3:
var test:Array=new Array(1,2,7,3,4,1,8,5,6,2,7,8,9,4);
нужно из этого получить(создать новый или как то из этого удалить) массив с не повторяющимся значениями...
Заранее спасибо!

Старый 20.01.2010, 23:50
murz вне форума Посмотреть профиль Отправить личное сообщение для murz Найти все сообщения от murz
  № 2  
Ответить с цитированием
murz
[+1 10.12.10]

Регистрация: Feb 2006
Сообщений: 148
Отправить сообщение для murz с помощью ICQ
Код AS3:
	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.
Старый 21.01.2010, 00:03
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Вы о чем это вообще...
Код AS3:
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);
EDIT:
Если извесно, что повторяющиеся значения однотипные (т.е. например массив содержит много единиц, а все остальные значения всегда уникальные), то можно это оптимизировать записывая найденные неуникальные значения в Dictionary и проверять их соответственно.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 21.01.2010 в 00:14.
Старый 21.01.2010, 00:12
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286

Код AS3:
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;
}

Старый 21.01.2010, 03:30
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 5  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
Код AS3:
		private function removeDuplicates(inArray : Array) : Array {
			return inArray.filter(_removeDuplicatesFilter);
		}
 
		private function _removeDuplicatesFilter(e : *, i : int, inArray : Array) : Boolean {
			return (i == 0) ? true : inArray.lastIndexOf(e, i - 1) == -1;
		}
__________________
Блог, Twitter
Брюзга.

Старый 21.01.2010, 11:19
Ckazkatmn вне форума Посмотреть профиль Отправить личное сообщение для Ckazkatmn Найти все сообщения от Ckazkatmn
  № 6  
Ответить с цитированием
Ckazkatmn

Регистрация: Jan 2010
Сообщений: 25
большое всем спасибо !!!

Старый 21.01.2010, 12:24
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 7  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Код AS3:
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;
}

Код AS3:
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


Код AS3:
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;
}



Код AS3:
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.

Старый 21.01.2010, 13:16
Fernando Costa вне форума Посмотреть профиль Отправить личное сообщение для Fernando Costa Найти все сообщения от Fernando Costa
  № 8  
Ответить с цитированием
Fernando Costa
 
Аватар для Fernando Costa

Регистрация: Oct 2006
Адрес: simferopol -> kyiv
Сообщений: 2,161
Отправить сообщение для Fernando Costa с помощью ICQ
Цитата:
Сообщение от Ckazkatmn Посмотреть сообщение
есть массив
Код AS3:
var test:Array=new Array(1,2,7,3,4,1,8,5,6,2,7,8,9,4);
нужно из этого получить(создать новый или как то из этого удалить) массив с не повторяющимся значениями...
Заранее спасибо!
есть подозрение чтобы не визникало такой ситтуации использовать ассоциативный массив.
__________________
: M F N W :

Старый 21.01.2010, 16:48
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 9  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
@udaaff:
На самом деле тест необъективный, очень много зависит от того, какие именно значения находятся в массиве и как они расположены. Т.е. рандомальные в большей части уникальные значения дадут разную производительность для разных алгоритмов, но, при этом, если, например взять массив, в котором повторяющиеся элементы однотипные, и они сгруппированы ближе к концу массива, то результат может оказаться вообще совсем другим для тех же алгоритмов. В каждом конкретном случае надо искать подходящее к ситуации решение.
Ну и есть, конечно заведомо неоптимизированые решения, типа с вложеным циклом.
__________________
Hell is the possibility of sanity

Старый 25.01.2010, 22:59
Crenth вне форума Посмотреть профиль Отправить личное сообщение для Crenth Найти все сообщения от Crenth
  № 10  
Ответить с цитированием
Crenth
[+1 19.06.10]
[+1 27.07.10]
 
Аватар для Crenth

Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
Цитата:
Сообщение от Ckazkatmn Посмотреть сообщение
есть массив
Код AS3:
var test:Array=new Array(1,2,7,3,4,1,8,5,6,2,7,8,9,4);
нужно из этого получить(создать новый или как то из этого удалить) массив с не повторяющимся значениями...
Заранее спасибо!
Код AS3:
test.sort();
var j:int=1;
while ((test.length>1) && (j<test.length)) {
	if (test[j]==test[j-1]) test.splice(j,1); else j=j+1;
}
кажется, пофигу, что сортировать тут

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:52.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:52.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.