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

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

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

Регистрация: Nov 2008
Адрес: Казахстан
Сообщений: 204
Отправить сообщение для Fillini с помощью ICQ
По умолчанию Сравнение двух массивов

Здравствуйте. Не подкинете ли алгоритм сравнения двух массивов?
Т.е Есть массив А и Б. Сравниваем. Получаем массив В который содержит элементы из А не входящия в Б.
Весь гугл перерыл

Код AS3:
 
А = ['a','b','c','d'];
Б = ['b','d'];
 
//сравниваем
 
В = ['a','c'];

Старый 16.06.2010, 13:58
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 2  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
немного сыро... возвращает уникальные элементы первого массива не входящие во второй.
Код AS3:
var a:Array = ["a", "b","c","z","E","g"];
var b:Array = ["a", "e","Z"];
trace(returnUnique(a,b))
 
function returnUnique(a:Array,b:Array):Array{
    var arr:Array = [];					
    for each(var i:Object in a) {
        if (b.indexOf(i) == -1) {
            arr.push(i);
        }
    }
    return arr;
}

Старый 16.06.2010, 14:02
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 3  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Код AS3:
 
var a:Array = ['a','b','c','d'];
var b:Array = ['b','d'];
 
var c:Array = getSubtraction( a, b );
 
 
trace( c );
 
 
 
function getSubtraction( arrA:Array, arrB:Array ):Array
{
	var arrOut:Array = [];
 
	var _isFound:Boolean;
 
	var i:int;
	var j:int;
 
	var li:int = arrA.length;
	var lj:int = arrB.length;
 
	for( i=0; i < li; i+=1 )
	{
		_isFound = false;
 
		for( j=0; j < lj; j+=1 )
		{
			if( arrA[i] === arrB[j] )
			{
				_isFound = true;
				break;
			}
		}
 
		if( !_isFound )
		{
			arrOut.push( arrA[i] );
		}
	}
 
	return arrOut;
}


Последний раз редактировалось i.o.; 16.06.2010 в 14:14.
Старый 16.06.2010, 14:03
PgeorgyV вне форума Посмотреть профиль Отправить личное сообщение для PgeorgyV Найти все сообщения от PgeorgyV
  № 4  
Ответить с цитированием
PgeorgyV

Регистрация: Apr 2008
Сообщений: 79
Код AS3:
trace(diff([1, 2, 3, 4, 5, 6], [2, 4, 6]).join(' '));
 
public function diff(a:Array, b:Array):Array {
	var c:Array = [];
	var l:int = 0;
	var o:Object;
	for (var i:int = 0, j:int = a.length; i < j; i++) {
		o = a[i];
		if (b.indexOf(o) == -1) {
			c[l++] = o;
		}
	}
	return c;
}


Последний раз редактировалось PgeorgyV; 16.06.2010 в 14:09.
Старый 16.06.2010, 14:06
Сайлас вне форума Посмотреть профиль Отправить личное сообщение для Сайлас Найти все сообщения от Сайлас
  № 5  
Ответить с цитированием
Сайлас

Регистрация: Mar 2008
Сообщений: 259
Цитата:
Сообщение от i.o. Посмотреть сообщение
Код AS3:
var arrOut:Array = [];
var _isFound:Boolean;
 
var li:int = A.length;
var lj:int = B.length;
 
var i:int;
var j:int;
 
for( i=0; i < li; i+=1 )
{
    _isFound = false;
 
    for( j=0; j < lj; j+=1 )
    {
          if( А[i] === B[j] )
          {
               _isFound = true;
               break;
          }
    }
 
    if( !_isFound )
    {
         arrOut.push( A[i] );
    }
}
 
trace( arrOut );
Можно написать более оптимальный алгоритм, если массивы будут отсортированы, кстати.

Цитата:
Код AS3:
function returnUnique(a:Array,b:Array):Array{
    var arr:Array = [];					
    for each(var i:Object in a) {
        if (b.indexOf(i) == -1) {
            arr.push(i);
        }
    }
    return arr;
}
А этот код никак не поддержит дублирующиеся элементы, а если дублирующиеся элементы не нужны, то тогда лучше объект использовать - поиск по ключу наамного быстрее

Старый 16.06.2010, 14:17
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 6  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Можно написать более оптимальный алгоритм, если массивы будут отсортированы, кстати.
можно, тогда j будет просто начинаться не с нуля, а с i

Старый 16.06.2010, 14:23
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 7  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Цитата:
Сообщение от Сайлас Посмотреть сообщение
А этот код никак не поддержит дублирующиеся элементы
Если я все правильно понял из задачи топикстартера, именно это и требовалось

Старый 16.06.2010, 14:31
Сайлас вне форума Посмотреть профиль Отправить личное сообщение для Сайлас Найти все сообщения от Сайлас
  № 8  
Ответить с цитированием
Сайлас

Регистрация: Mar 2008
Сообщений: 259
Цитата:
Сообщение от Партизан Посмотреть сообщение
Если я все правильно понял из задачи топикстартера, именно это и требовалось
Ну тогда лучше не массивы, а объекты использовать...

Старый 16.06.2010, 14:43
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Код AS3:
var a:Array = ["a", "b","c","z","E","g"];
var b:Array = ["a", "e","Z"];
 
var noMatch:Function = function(element:*, index:int, arr:Array):Boolean
{
	return (this as Array).indexOf(element) < 0;
}
 
var difArr:Array = a.filter(noMatch, b);
trace( "difArr : " + difArr );

Старый 16.06.2010, 14:54
Fillini вне форума Посмотреть профиль Отправить личное сообщение для Fillini Найти все сообщения от Fillini
  № 10  
Ответить с цитированием
Fillini
 
Аватар для Fillini

Регистрация: Nov 2008
Адрес: Казахстан
Сообщений: 204
Отправить сообщение для Fillini с помощью ICQ
Спасибо. Все работает. Да именно не дублирующиеся. Использую алгоритм партизана.

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

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

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


 


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


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