|    | 
СИ-БИ техника | КВ техника | УКВ техника | Радиоизмерения | Защита от TVI | Источники питания | Софт | Расчеты | Справочники
Главная arrow Программирование arrow Java arrow Как отсортировать строки в таблице  

Как отсортировать строки в таблице

Оглавление
Как отсортировать строки в таблице
Страница 2
Страница 1 из 2

Проблема

Мне нужно отсортировать строки в таблице по заданному посетителем критерию. Как это сделать?

Решение

Увы — универсальных решений здесь нет. Хотя, если наша таблица построена на основе данных, хранящихся в массиве (например, она была создана методом createTable объекта DynamicTable, объявление которого представлено в листинге 8.1), можно сначала отсортировать сам массив, а потом уже формировать на его основе таблицу.

Отсортировать массив можно, вызвав метод sort объекта Array. Формат вызова этого метода таков:

<Массив>.sort([<Функция сортировки>]);

Если Функция сортировки не указана, метод sort выполняет простейшую сортировку. Он извлекает два соседних элемента массива, преобразует их в строковый вид и сравнивает. (Опытные компьютерщики говорят, что этот метод выполняет ASCII-сортировку.) После сравнения элемент, соответствующий "меньшей" строке, перемещается в начало массива.

Недостаток такого подхода очевиден — числовые значения сортируются некорректно. Так, числа 1234 и 12345 будут признаны равными, т. к. первые четыре их символа совпадают. Так что простейшая сортировка поможет нам только в случае массивов, содержащих одни строки. В остальных же случаях нам придется задавать Функцрю сортировки.

Функция, которая должна выполнять сортировку и которую мы передадим методу sort, должна принимать два параметра — два сравниваемых элемента массива. Возвращать же она должна одно из трех перечисленных далее значений:

любое отрицательное число, если первый элемент массива должен находиться перед вторым (первый элемент "меньше" второго);

ноль, если порядок следования элементов массива не должен измениться (оба элемента "равны");

О любое положительное число, если первый элемент массива должен находиться после второго (первый элемент "больше" второго).

Народ советует

Часто функции сортировки возвращают значения -1, 0 и 1.

А уж в теле функции мы можем задать любой алгоритм сравнения элементов массива, который нам нужен. Мы даже сможем сортировать массив, каждый элемент которого представляет собой массив (кстати, это как раз наш случай) или экземпляр объекта.

Осталось только сказать, что метод sort объекта Array возвращает отсортированный массив и при этом изменяет массив, для которого он вызван.

Пример 1

Давайте возьмем Web-страницу из первого примера, описывающего использование объекта DynamicTable, и исправим ее код так, чтобы таблица выводилась уже отсортированной по столбцу Категория. Для этого нам понадобится добавить в. формирующий таблицу Web-сценарий всего несколько строк (в приведенном далее фрагменте кода они Выделены полужирным шрифтом):

tableBody[5] = new Array(JSPS_COMPILING, "Delphi"); tableBody[6] = new Array (JSPS_COMPILING, "Visual Basic") ;

function sortArray(pElementl, pElement2) {

if (pElemantl[0] < pElexnent2[0])

return -1 else

if (pElementl[0] == pElement2[0]) { if (pElementl[l] < pElement2[l])

return -1 else

if (pElementltl] == pElement2[1])

return 0 else

return 1; } else

return 1; }

tableBody.sort(sortArray);

var tableObject = new DynamicTable(document.body); tableObject.createTable(tableBody, tableHead, null, "Языки программирования"); tableObject.showTable();

Здесь мы сортируем массив сначала по первому элементу вложенного массива, а потом по его второму элементу.


Пред. - След. »


RLBN.ru - Электроника и компьютеры

0.1532
Hosted by uCoz