Between2Nums
Запись от Партизан размещена 28.11.2010 в 18:21
Частенько сталкивался с такой ситуацией, когда нужно выяснить в каком диапазоне находится число. Наткнулся на эту вот запись, и решил написать еще одну маленькую но удобную вещь.
Что она в итоге умеет? Умеет искать среди массива диапазонов([min,max]) тот, в который входит число если val>=min && val<=max. Умеет вызвать предопределенную по умолчанию функцию которая задается в конструкторе если val входит в диапазон, или специальную для любого диапазона и передать некоторые параметры.
Умеет по умолчанию искать все вхождения в диапазоны или обрабатывать только первое совпадение (firstEntry:Boolean аргумент в конструкторе)
Собственно класс:
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; } } }
var b2n:Between2Nums = new Between2Nums(defaultCallback:Function = null, firstEntry:Boolean = true, data:Array = null);
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]
Ну где-то так.
И как-бы пример:
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) }
Всего комментариев 0
Комментарии
Последние записи от Партизан
- TransformUtil (20.05.2012)
- Between2Nums (28.11.2010)
- Termination (27.11.2010)
- KeyChecker v0.2 (27.11.2010)
- KeyChecker (26.11.2010)