Функция ASORT()

Сортирует элементы массива в возрастающем или убывающем порядке.

Синтаксис:

ASORT(ArrayName [, nStartElement [, nNumberSorted [, nSortOrder]]])

Параметры:
ArrayName
Задает имя сортируемого массива.
nStartElement
Задает элемент, с которого начинается сортировка. Если аргумент nStartElement опущен, массив по умолчанию сортируется, начиная с самого первого элемента. Если массив одномерный, сортировка включает сам элемент nStartElement. Если массив двумерный, начальный элемент nStartElement определяет и строку, с которой начинается сортировка, и столбец, определяющий порядок сортировки строк.
Замечание Элемент двумерного массива можно указывать двумя способами: либо с помощью двух индексов, задающих позиции элемента в массиве по строкам и по столбцам, либо с помощью одиночного номера. Данная функция, как и ряд других функций, манипулирующих двумерными массивами, требуют задания одиночных номеров (в данном случае ѕ числовые выражения nStartElement и nNumberSorted). Для получения номера элемента исходя из его строчного и столбцевого индексов используйте функцию AELEMENT( ).
В следующем примере начальный элемент nStartElement определяет, как сортируются строки в двумерном массиве. Создается небольшой массив gaArray, который сортируется дважды. Первая сортировка начинается с первого элемента массива gaArray, при этом строки сортируются по значениям, содержащимся в первом столбце массива. Вторая сортировка начинается с четвертого элемента массива gaArray, и при этом строки сортируются по значениям, содержащимся во втором столбце.
Первая сортировка начинается с первой строки. Вторая сортировка начинается со второй строки. С помощью команды DISPLAY MEMORY можно отобразить содержимое массива; в данных примерах таблицы используются для графического изображения результатов сортировки.
Далее следуют команды, создающие массив gaArray:

DIMENSION gaArray(3,2)
gaArray(1) = 'G'
gaArray(2) = 'A'
gaArray(3) = 'C'
gaArray(4) = 'Z'
gaArray(5) = 'B'
gaArray(6) = 'N'

Массив gaArray выглядит следующим образом:

		Столбец 1	Столбец 2
Строка 1	G	A
Строка 2	C	Z
Строка 3	B	N

Затем массив сортируется функцией ASORT( ), начиная с первого элемента (1,1). Элементы первого столбца располагаются в возрастающем порядке переупорядочением строк массива.

=ASORT(gaArray,1)

Новый порядок строк будет следующим:

		Столбец 1	Столбец 2
Строка 1	B	N
Строка 2	C	Z
Строка 3	G	A

Затем массив сортируется, начиная с четвертого элемента (2,2). Элементы второго столбца располагаются по порядку перестановкой строк массива.

=ASORT(gaArray,4)

Обратите внимание на разницу в порядке строк:

		Столбец 1	Столбец 2
Строка 1	B	N
Строка 2	G	A
Строка 3	C	Z

nNumberSorted
Задает число элементов, сортируемых в одномерном массиве, или число строк, сортируемых в двумерном массиве. Например, если массив одномерный и значение nStartElement равно 2 (то есть сортировка начинается со второго элемента массива), а значение nNumberSorted равно 3 (то есть в сортировке должны участвовать три элемента), то будут отсортированы второй, третий и четвертый элементы массива. Если значение nNumberSorted равно -1 или не задано вообще, сортируются все элементы массива, начиная с элемента nStartElement и кончая последним элементом массива.
Если массив двумерный, nNumberSorted обозначает число строк, которые будут отсортированы, начиная со строки, содержащей элемент nStartElement. Например, если значение nStartElement равно 2, а значение nNumberSorted равно 3, в сортировке участвуют строка, содержащая второй элемент массива, и две следующие за ней строки. Если значение nNumberSorted равно -1 или вообще не задано, будут отсортированы все строки, начиная со строки, содержащей элемент nStartElement, и кончая последней строкой массива.
nSortOrder
Задает вид сортировки элементов массива (в возрастающем или в убывающем порядке). По умолчанию элементы массива сортируются в возрастающем порядке. Если значение nSortOrder равно 0 или опущено, элементы массива сортируются в возрастающем порядке. Если значение nSortOrder равно 1 или любому неотрицательному числу, элементы массива сортируются в убывающем порядке.

Результат:
Числовой

Комментарии:
Все элементы, участвующие в сортировке, должны принадлежать одному типу данных. Одномерные массивы сортируются по элементам; двумерные массивы сортируются по строкам. Когда сортируется двумерный массив, порядок строк в массиве изменяется таким образом, что элементы в столбце массива располагаются в возрастающем или в убывающем порядке.
Если сортировка завершается успешно, возвращается значение 1; в противном случае возвращается -1.

Пример:

* В следующем примере поле contact копируется из таблицы customer в
* массив gaContact. На экран выводятся первые 20 элементов массива.
* Затем массив сортируется, и на экране отображается результат
* сортировки.
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE Customer	&& Open customer table

COUNT TO gnCount	&& Number of contacts
DIMENSION gaContact(gnCount,1)	&& Create a contact array
COPY TO ARRAY gaContact FIELD contact	&& Fill the array

CLEAR
? 'Contact names:'
?
FOR nCount = 1 TO 20
	? gaContact(nCount)	&& Display first 20 contacts
ENDFOR
= ASORT(gaContact))	&& Sort the array

?
? 'Sorted Contact names:'
?
FOR nCount = 1 TO 20
	? gaContact(nCount)	&& Display first 20 contacts, sorted
ENDFOR

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 22.11.2002