UPDATE: Добавил пример с Dictionary, который оказался хоть и не на много, но быстрее.
Вроде бы тривиальная задача — есть трехбуквенное имя месяца ( Jan, Feb, Mar… ) и из него нужно получить номер месяца. Небольшой поиск готовых велосипедов под рукой ни к чему не привел, так что придется написать небольшой хелпер для дальнейшего использования. Самый простой вариант — Array.indexOf из массива названий в порядке следования месяцов. А можно еще искать вручную или индекс подстроки в строке. Так все же, как делать?
Пришлось составить небольшой бенчмарк.
var arr: Array = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
var str: String = "JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC";
var dic: Dictionary = new Dictionary();
dic["JAN"] = 0;
dic["FEB"] = 1;
dic["MAR"] = 2;
dic["APR"] = 3;
dic["MAY"] = 4;
dic["JUN"] = 5;
dic["JUL"] = 6;
dic["AUG"] = 7;
dic["SEP"] = 8;
dic["OCT"] = 9;
dic["NOV"] = 10;
dic["DEC"] = 11;
function testArr( s: String ): int
{
return arr.indexOf( s.toUpperCase() );
}
function testArr2( s: String ): int
{
var i: int = 0;
s = s.toUpperCase();
for ( i = 0; i < 12; i++ )
if ( arr[i] == s ) return i;
return -1;
}
function testStr( s: String ): int
{
var i: int = str.indexOf( s.toUpperCase() );
if ( i == -1 )
return -1;
return i >> 2;
}
function testDic( s: String ): int
{
return dic[s.toUpperCase()];
}
Каждая функция вызывалась 10 раз по 100 000 раз для каждого месяца и полученное значение в ms усреднялось. В итоге получился следующий график.

Меньше — лучше. X — номер месяца. Y — время выполнения.
СИНИЙ — Array.indexOf
КРАСНЫЙ — Ручной поиск по массиву
ЗЕЛЕНЫЙ — Поиск в строке
ФИОЛЕТОВЫЙ — Dictionary
Из полученных результатов видно, что для поставленной задачи больше подходят примеры со строкой и словарем. Ручной поиск приближается по времени, а Array.indexOf, похоже, занимается каким-то избыточным сравнением (=== ?) и в данном случае работает слишком медленно.







что такое “i <” во втором методе? точнее lt и откуда он берётся? и почему нету тестов с хешом?
это знак меньше — хтмлный косячок прокрался
хэш — Dictionary?
Dictionary != хэш. Он нужен там, где ключами являются сложные типы, а не обычные строки. для строковых ключей, как бы хватает Object.