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

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

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

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
Question Поиск в многомерном массиве

Пишу техническую программку для друга. Столкнулся с таким случаем. есть многомерный массив
Код AS3:
var mss:Array= new Array(new Array(0,1),new Array(1,2),new Array(2,3));
далее необходимо добавить в этот массив данные типа

Код AS3:
var mass2: Array= new Array(3,4);
но перед этим необходимо проверить нет ли уже подобных данных в массиве и если нет то тогда добавлять. Пробовал indexOf но он пропускает и данные добавляются.
Код AS3:
if (mss.indexOf(new Array(num1, num2)) < 0) {
						mss[mss.length] = new Array(num1, num2);// на счет этой конструкции не парьтесь просто у меня .push() - начал капризничать а так идет гладко, сохраняя логику всего приложения
					}else {
						trace('ошибка: уже есть');
					}
в общем нужно найти выход из сложившейся ситуации по проще чтобы не городить парсер, ну или если без него никак то дайте знать. Надеюсь задача ясна. чтобы отсечь неуместные ответы, подведу итог. Как проверить наличие в многомерном массиве

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Наверное, только циклом.
__________________
There is no thing in this world that is not simple.

Старый 14.06.2015, 19:45
PsychoTech вне форума Посмотреть профиль Отправить личное сообщение для PsychoTech Найти все сообщения от PsychoTech
  № 3  
Ответить с цитированием
PsychoTech
 
Аватар для PsychoTech

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
этого я и боялся. а что если в моем случае только два параметра и обернуть их не в массив а в точку
Код AS3:
var mss:Array= new Array(new Point(0,1),new Point(1,2),new Point(2,3));
Код AS3:
if (mss.indexOf(new Point(num1, num2)) < 0) {
						mss[mss.length] = new Point(num1, num2);
					}else {
						trace('ошибка: уже есть');
					}
такая конструкция будет проверть не массив а точки и по идеи
Код AS3:
new  Point(1,0) === new  Point(1,0)
или нет?

Старый 14.06.2015, 19:53
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 4  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Насколько мне известно - экземпляры классов проверяются по ссылкам, поэтому new Point(1, 0) != new Point(1, 0) - true;

А вот String, int, Number примитивы проверяются по содержанию, да.
__________________
There is no thing in this world that is not simple.

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

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
сам спросил -> сам отвечаю. Не идет. Неужели только через цикл проверять?

Старый 14.06.2015, 20:00
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 6  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Ну, это не должно вас пугать, indexOf в недрах тоже циклом проходится по элементам и сравнивает с каждым, только делает это чуть быстрее штатных средств AS3.
__________________
There is no thing in this world that is not simple.

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Если у вас массив с точками, то найти одинаковую точку в таком массиве не сложно
Код AS3:
public function Main() 
{
	//добавили точки в массив
	arr.push(new Point(0,1));
	arr.push(new Point(1,2));
	arr.push(new Point(3,4));
 
	//попытаться добавить новую точку, если нет похожей
	trace(addIfNotSame(arr, new Point(1,1)));
 
}
 
public function addIfNotSame(array:Array, point:Point):Boolean 
{
 
	for (var i:int = 0; i < array.length; i++) 
	{
		//.. если хоть одна точка такая же, как и та, что хотим добавить,
		//то прекращаем поиск и выходим из метода
		if ((array[i] as Point).equals(point)) return false;
	}
 
	//если одинаковых точек не нашлось, то добавляем точку в массив
	array.push(point);
 
	return true;
}


Последний раз редактировалось samana; 14.06.2015 в 20:22. Причина: Немного укоротил код
Старый 14.06.2015, 20:21
PsychoTech вне форума Посмотреть профиль Отправить личное сообщение для PsychoTech Найти все сообщения от PsychoTech
  № 8  
Ответить с цитированием
PsychoTech
 
Аватар для PsychoTech

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
Цитата:
Сообщение от samana Посмотреть сообщение

Код AS3:
public function addIfNotSame(array:Array, point:Point):Boolean
Пожалуй лучше написать общую функцию для использования где угодно, к тому же бывает нужно только проверить но не добавлять. а мне это как раз предстоит и не один раз.
что ж, всем спасибо.

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

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Создать двумерный массив и записывать туда какая ячейка занята не подойдет?

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

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
Цитата:
Сообщение от udaaff Посмотреть сообщение
Создать двумерный массив и записывать туда какая ячейка занята не подойдет?
к сожалению нет в моем случае новые записи должны дописываться именно в конец и чтобы не повторялись иначе в другом цикле не будет конца. Если конкретнее то флеш будет писать новые линии по координатам которые уже были использованы. и второй момент новые данные появляются при вводе пользователем данных изначально флеш отрисовывает стандартную фигуру для конкретного случая. в общем уже разобрались.

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

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

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


 


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


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