Показать сообщение отдельно
Старый 21.04.2004, 01:43
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 18  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
вобщем-то всё правильно и работает.
но.
имха, не стоит отступать от буквы мануала там где это не принципиально :)

ведь сказано же:
Цитата:
compareFunction can have one of the following three values:

-1 if A should appear before B in the sorted sequence
0 if A = B
1 if A should appear after B in the sorted sequence
теперь сравните: (не исключено что я где-то ошибся при тестах, но разница очень уж велика...)

1. твой вариант.
Код:
Array.prototype.compareFunction = function(element1, element2) {
	return (element1.toLowerCase()>element2.toLowerCase());
};
Array.prototype.sortbyAlph = function() {
	this.sort(this.compareFunction);
};
//
x = [];
for (var i = 0; i<100; i++) {
	x.push(chr(32+i));
}
//
heap = [];
for (var i = 0; i<10; i++) {
	heap.push(x.concat());
}
var s = getTimer();
for (var i = 0; i<10; i++) {
	heap[i].sortbyAlph();
}
var e = getTimer();
trace(e-s);
2. вариант честный. (я машинально делаю так :) )
Код:
Array.prototype.compareFunction = function(element1, element2) {
	var e1 = element1.toLowerCase();
	var e2 = element2.toLowerCase();
	return Number(e1<e2 || (e1>e2)*(-1));
};
Array.prototype.sortbyAlph = function() {
	this.sort(this.compareFunction);
};
//
x = [];
for (var i = 0; i<100; i++) {
	x.push(chr(32+i));
}
//
heap = [];
for (var i = 0; i<10; i++) {
	heap.push(x.concat());                
}
var s = getTimer();
for (var i = 0; i<10; i++) {
	heap[i].sortbyAlph();
                heap[i].reverse();
}
var e = getTimer();
trace(e-s);
тестил на компе: П3, 667мхз, 384мб СДрам. получил разницу в пол секунды и выше. я бы сказал что разница критическая :) хотя понятное дело что и так и так работать будет.

причем это взят массив всего в 100 элементов, состоящий из чаров. если возьмем строки длиной больше 1 - разница будет еще существеннее, что-то мне подсказывает. (не проверял)


Последний раз редактировалось Nox Noctis; 21.04.2004 в 01:46.