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

Вернуться   Форум Flasher.ru > Блоги > Партизан

Оценить эту запись

Between2Nums

Запись от Партизан размещена 28.11.2010 в 18:21

Частенько сталкивался с такой ситуацией, когда нужно выяснить в каком диапазоне находится число. Наткнулся на эту вот запись, и решил написать еще одну маленькую но удобную вещь.
Что она в итоге умеет? Умеет искать среди массива диапазонов([min,max]) тот, в который входит число если val>=min && val<=max. Умеет вызвать предопределенную по умолчанию функцию которая задается в конструкторе если val входит в диапазон, или специальную для любого диапазона и передать некоторые параметры.
Умеет по умолчанию искать все вхождения в диапазоны или обрабатывать только первое совпадение (firstEntry:Boolean аргумент в конструкторе)
Собственно класс:
Код AS3:
package utils {
 
	/**
	 * ...
	 * @author Mikhail Klabukov (SaintPartizan) Q_QWERT@mail.ru
	 */
	public class Between2Nums {
		private var _data:Array;
		private var _defaultFunc:Function;
		private var _firstEntry:Boolean;
 
		public function Between2Nums(defaultCallback:Function = null, firstEntry:Boolean = true, data:Array = null){
			_defaultFunc = defaultCallback;
			_firstEntry = firstEntry;
			_data = data;
		}
 
		public function addRange(min:Number, max:Number, callback:Function = null, args:Array = null):void {
			if (!_data)
				_data = [];
			_data.push([min, max, callback, args]);
		}
 
		public function check(val:Number):Array {
			var find:Array = [];
			if (!_data)
				throw new Error("Between2Nums: Nothing to compare. Use addRange method first.");
			for each (var i:Array in _data){
				if (val >= i[0] && val <= i[1]){
					if (i[2] as Function){
						(i[2] as Function).apply(this, i[3]);
					} else if (_defaultFunc as Function){
						_defaultFunc.apply(this, [val, i]);
					}
					find.push(i);
					if (_firstEntry)
						break;
				}
			}
			return find;
		}
	}
}
Как юзать:
Код AS3:
var b2n:Between2Nums = new Between2Nums(defaultCallback:Function = null, firstEntry:Boolean = true, data:Array = null);
defaultCallback = функция которая будет вызываться по умолчанию(если задана) при найденном диапазоне
firstEntry = если true то будет отрабатываться только первое найденное совпадение если false то все последующие так же будут отработаны
data = массив вида [[min:Number,max:Number,func:Function,args:Array],...]
Все три аргумента необязательные.
Т.е. все можно задать в конструкторе, а можно через метод addRange(min:Number, max:Number, callback:Function = null, args:Array = null)

min,max = диапазон, например 10,40
func = callback функция которая будет вызвана если проверяемое число попало в диапазон.
args = аргументы для func, т.е. func(...args)

метод check возвращает массив найденных диапазонов

в дефолтную функцию передается два аргумента. первым идет само число, вторым массив найденного диапазона [min,max]

Ну где-то так.
И как-бы пример:
Код AS3:
var b2n:Between2Nums = new Between2Nums();
			b2n.addRange(0, 10, trace, ['между ноль и десять']);
			b2n.addRange(10, 20, trace, ['между десять и двадцать']);
			b2n.addRange(20, 40, trace, ['между двадцать и сорок']);
			b2n.addRange(30, 50, trace,  ['между тридцать и пятьдесят']);
 
			for (var i:int = 0; i < 10; i++) 
			{
				var j:int = Math.random() * 50
				b2n.check(j)
			}
*чет как-то все запутанно получилось* Хотелось просто минимум требований
Вложения
Тип файла: rar Between2Nums.rar (613 байт, 114 просмотров)
Всего комментариев 0

Комментарии

 
Последние записи от Партизан

 


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


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