Сортирует элементы массива в возрастающем или убывающем порядке.
ASORT(ArrayName [, nStartElement [, nNumberSorted [, nSortOrder [, nFlags]]]) |
Параметры
- ArrayName
-
Задает имя массива, элементы которого должны быть отсортированы.
- nStartElement
-
Задает элемент, с которого начинается сортировка. Если аргумент nStartElement опущен, массив по умолчанию сортируется, начиная с самого первого элемента. Если массив одномерный, сортировка включает сам элемент nStartElement. Если массив двумерный, начальный элемент nStartElement определяет и строку, с которой начинается сортировка, и столбец, определяющий порядок сортировки строк.
Примечание
В общем случае к элементу двухмерного массива можно обратиться одним из двух способов. В первом способе используются два индекса, определяющие позицию элемента в массиве по номеру строки и столбца, во втором - номер элемента в массиве. Данная функция, как и ряд других функций, манипулирующих двухмерными массивами, требуют задания номера элемента (в функции ASORT() - числовые выражения 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 - любое положительное число, элементы массива сортируются в убывающем порядке.
- nFlags
-
Определяет чувствительность сортировки к регистру символов. Допустимые значения: 0 (по умолчанию) и 1. Для определения порядка сортировки функция ASORT( ) использует текущее правило сопоставления (смотрите Команда SET COLLATE). Некоторые правила сопоставления (например, "GENERAL") не чувствительны к регистру и установка nFlags = 0 в этих случаях не оказывает никакого воздействия на определение порядка сортировки.
Использование параметра nFlags имеет смысл только в случаях, когда текущее правило сопоставления чувствительно к регистру (например, "MACHINE"), а Вам необходимо, чтобы при сортировке регистр не принимался во внимание.
Число, которое задается в качестве значения параметра nFlags, определяет значение бита, ответственного за чувствительность к регистру:
nFlag Бит Описание 0
000
Сортировка с учетом регистра
1
001
Сортировка без учета регистра
![]() |
---|
Если Вы задаете только nFlags, Вы можете опустить другие параметры, передавая их как -1. |
Возвращаемое значение
Numeric
Замечания
Все элементы, участвующие в сортировке, должны принадлежать одному типу данных. Одномерные массивы сортируются по элементам; двумерные массивы сортируются по строкам. Когда сортируется двумерный массив, порядок строк в массиве изменяется таким образом, что элементы в столбце массива располагаются в возрастающем или в убывающем порядке.
Если сортировка завершается успешно, возвращается значение 1; в противном случае возвращается -1.
Пример
В следующем примере поле contact
копируется из таблицы customer
в массив gaContact
. На экран выводятся первые 20 элементов массива. Затем массив сортируется, и на экране отображается результат сортировки.
![]() | |
---|---|
CLOSE DATABASES OPEN DATABASE (HOME(2) + '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 |