Difference between revisions of "Tab.Sort"

From SunFlurry wiki
Jump to: navigation, search
 
m (1 revision imported)
 
(No difference)

Latest revision as of 08:53, 7 February 2021

  Sort (Сортировка)
Объект:Таблица
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Неверное имя столбца, невозможно превратить в число, строку
Визуальность:Нет

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

Синтаксис

Tab.Sort(<Наименование столбцов сортировки с суффиксами через запятую (STRING)>,<Алгоритм сортировки (INT)>=1)

Аргументы

  • <Наименование столбцов сортировки с суффиксами через запятую (STRING)> - Строка содержит список наименований столбцов поиска через запятую со знаками направления сортировки, если это необходимо. Регистр наименований не имеет значения. Каждый заданный столбец должен присутствовать в таблице. Сортировка будет производиться по каждому из столбцов последовательно, т.е. после сортировки по первому указанному столбцу, группы строк, для которых значение первого столбца было одинаково сортируются внутри себя по второму столбцу и т.д. Формат аргумента имеет сл. вид: <Столбец1>[{+,-}][,<Столбец2>[{+,-}]...]. К примеру, aTab.Sort("Контрагент+,Номенклатура-,Партия"). Знак + используется для сортировки указанного столбца по неубыванию, - по невозрастанию, если знак пропущен, используется сортировка по неубыванию.
  • <Алгоритм сортировки (INT)> - (необязательный аргумент) Может принимать значения: 0 -- использовать алгоритм "quicksort", 1 (по умолчанию) -- использовать алгоритм сортировки при объединении. Менять этот параметр не рекомендуется, так как "quicksort" будет медленнее во всех случаях, чем алгоритм по умолчанию, для больших таблиц он может быть значительно медленнее.

Примеры

//Создается и заполняется таблица значений
aTab:=Tab.Create("b1,b2,b3,b4");

aTab.AddLine("b1,b2,b3,b4",1,2,3,4);
aTab.AddLine("b1,b2,b3,b4",2,2,3,33);
aTab.AddLine("b1,b2,b3,b4",3,5,5,4);
aTab.AddLine("b1,b2,b3,b4",4,2,3,4);
aTab.AddLine("b1,b2,b3,b4",4,2,3,77);
aTab.AddLine("b1,b2,b3,b4",5,2,3,4);

//Сортировка по неубыванию по столбцу b2, затем по невозрастанию по столбцу b1
aTab.Sort("b2,b1-");
aTab.Select();
While aTab.Next() Do
  Message(""+aTab.b1+"; "+aTab.b2+"; "+aTab.b3+"; "+aTab.b4);
EndDo;

//Будет выведено последовательно:
//"5; 2; 3; 4"
//"4; 2; 3; 4"
//"4; 2; 3; 77"
//"2; 2; 3; 33"
//"1; 2; 3; 4"
//"3; 5; 5; 4"