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

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

Параметры

ArrayName

Задает имя массива, элементы которого должны быть отсортированы.

nStartElement

Задает элемент, с которого начинается сортировка. Если аргумент nStartElement опущен, массив по умолчанию сортируется, начиная с самого первого элемента. Если массив одномерный, сортировка включает сам элемент nStartElement. Если массив двумерный, начальный элемент nStartElement определяет и строку, с которой начинается сортировка, и столбец, определяющий порядок сортировки строк.

NoteПримечание

В общем случае к элементу двухмерного массива можно обратиться одним из двух способов. В первом способе используются два индекса, определяющие позицию элемента в массиве по номеру строки и столбца, во втором - номер элемента в массиве. Данная функция, как и ряд других функций, манипулирующих двухмерными массивами, требуют задания номера элемента (в функции ASORT() - числовые выражения nStartElement и nNumberSorted). Для получения номера элемента исходя из его индексов, определяющих строку и столбец, используйте функцию AELEMENT( ).

В следующем примере начальный элемент nStartElement определяет, как сортируются строки в двухмерном массиве. Создается небольшой массив gaArray, который сортируется дважды. Первая сортировка начинается с первого элемента массива gaArray, при этом строки сортируются по значениям, содержащимся в первом столбце массива. Вторая сортировка начинается с четвертого элемента массива gaArray, и при этом строки сортируются по значениям, содержащимся во втором столбце.

Первая сортировка начинается с первой строки. Вторая сортировка начинается со второй строки. С помощью команды DISPLAY MEMORY можно отобразить содержимое массива; в данных примерах последующие три таблицы используются для графического изображения результатов сортировки.

Следующие команды создают массив с именем gaArray и присваивают значения его элементам:

  CopyCode imageСкопировать код
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). Элементы первого столбца располагаются в возрастающем порядке переупорядочением строк массива.

  CopyCode imageСкопировать код
=ASORT(gaArray,1)

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

  Кололнка 1 Кололнка 2

Строка 1

B

N

Строка 2

C

Z

Строка 3

G

A

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

  CopyCode imageСкопировать код
=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

Сортировка без учета регистра

NoteПримечание

Если Вы задаете только nFlags, Вы можете опустить другие параметры, передавая их как -1.

Expand imageВозвращаемое значение

Numeric

Expand imageЗамечания

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

Если сортировка завершается успешно, возвращается значение 1; в противном случае возвращается -1.

Expand imageПример

В следующем примере поле contact копируется из таблицы customer в массив gaContact. На экран выводятся первые 20 элементов массива. Затем массив сортируется, и на экране отображается результат сортировки.

  CopyCode imageСкопировать код
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

Expand imageСмотрите также