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

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

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

Регистрация: Nov 2013
Сообщений: 4
Question Сравнение массивов

Описанный метод проверяет имена объектов массива list на полное соответствие с элементами массива jointList путем поочередного сравнения. Есть ли какой-то более простой способ делать подобные сравнения? Может быть есть какие-то базовые методы для этих целей?

Код AS1/AS2:
jointList = new Array()
jointList["Spinpoint"] = ["mountpoint","reciever"]
 
function checkJoints(list){
	var match:Number
	for (_jname in jointList){
		match = 0
		trace("checking "+_jname)
		for (_type in jointList[_jname]){			
			for(_obj in list){
				if (list[_obj].name == jointList[_jname][_type]){
					match++
					if( match == jointList[_jname].length ){
						trace(_jname+" full match")
					}
				}
			}
		}
	}
}

Старый 20.11.2013, 11:59
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Spellbreaker, для ассоциативного массива проще использорвать объект:

Код AS1/AS2:
var list:Object = {};
list["someField"] = 1;
Я не совсем понимаю, что вы пытаетесь сравнить. Ну а вообще поочередное сравнение вполне нормальная практика. Если вам нужен логический результат — сравниваете только до первого несоответствия, к примеру.

Еще вариант (не заню только, насколько удачный) — сравнивать строки, если вы поля сравниваете:

Код AS1/AS2:
function objectFieldsToString(object:Object):String{
    var returnString:String = "";
    for(var i in object){
        returnString += i;
    }
    return returnString;
}
Грубо говоря, вы, основываясь на всех полях объекта, получаете строку. А по строкам можете сравнить, аналогичны ли поля двух объектов. Это подходит для сравнения целостности данных, к примеру. Когда есть стандартный объект с полями (к примеру, которые мы должны получить от сервера) и вам нужно узнать, всех ли полей хватает.

И еще. Насчет вашего примера, — много циклов. Лучше бы разбить на методы типа такого:

Код AS1/AS2:
function fieldInObject(object:Object, field:String):Boolean{
    return object[field] != null;
}
 
function valuesEqualInObjectsFields(objects:Array, field:String):Boolean{
    var totalObjects:Number = objects.length;
    for(var k:Number = 0; k < totalObjects; k++){
        var object_1:Object = objects[k];
        for(var j:Number = 0 ; j < totalObjects; j++){
           if(k != j){
                if(object_1[field] != objects[j][field]){
                    return false;
                }
           }
        }
    }
    return true;
}
Могу ошибиться, на ас2 давно не писал + пишу в браузере.
__________________
hauts.ru

Старый 20.11.2013, 12:35
Spellbreaker вне форума Посмотреть профиль Отправить личное сообщение для Spellbreaker Найти все сообщения от Spellbreaker
  № 3  
Ответить с цитированием
Spellbreaker

Регистрация: Nov 2013
Сообщений: 4
Описанный в методе алгоритм проверяет на принадлежность к условному типу, в примере "Spinpoint", путем сравнения имен объектов из полученного массива со строками "Spinpoint". Для этого объявлена переменная, считающая количество соответствий. Таким образом если счетчик равен числу строк в условном типе, то полученный массив условно считается типом "Spinpoint" и дальше уже исполняется программная логика.

В любом случае, речь идет не об оптимизации, алгоритм работает так, как задумано, вопрос лишь в том, есть ли нативный метод, для решения таких задач. Просто у меня закралось подозрение, что он есть, а я изобретаю велосипед =)

Старый 20.11.2013, 12:45
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 4  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Это как оператор "is"?

Код AS3:
if(someClassInstance is MyMegaClass){
    // ok condition
}
То есть вы методом описания нужных полей и последующим сравнением проверяете, является ли сущность идентичной по структуре с той, которая вам нужна?

Условный тип... Может классами оперировать все-таки?
__________________
hauts.ru

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

Регистрация: Nov 2013
Сообщений: 4
Я неспроста использовал слово "условный", так логичнее воспринимается суть сравнения. Классы являются всем, что наследуют, следовательно при таком сравнении, даже "чистые" экземпляры классов сравнивались бы по тому же принципу, но уже с классом вместо имени объекта.

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

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

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


 


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


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