array_sortby
功能
对数组中的元素根据另外一个键值数组元素或者 Lambda 函数生成的键值数组元素进行升序排列 。有关 Lambda 表达式的详细信息,参见 Lambda expression。该函数从 2.5 版本开始支持。
举例,有两个数组 a = [3,1,4],b = [7,5,6]。将 b
作为排序键,对 a
里的元素进行排序。
根据键值对关系,b
的元素 [7,5,6] 一一对应 a
的 元素[3,1,4]。
转换前:
数组 | 第一个元素 | 第二个元素 | 第三个元素 |
---|---|---|---|
a | 3 | 1 | 4 |
b | 7 | 5 | 6 |
转换后,b 按照升序排列为 [5,6,7],对应 a 的元素位置也进行相应调整,变为 [1,4,3]。
数组 | 第一个元素 | 第二个元素 | 第三个元素 |
---|---|---|---|
a | 1 | 4 | 3 |
b | 5 | 6 | 7 |
当参与排序的数组大于2个时候,该函数的作用是根据多个数组列(如 array1、array2、array3 等)的值对 array0 进行升序排列。排序规则如下:
- 首先比较 array1 的对应元素;
- 如果相同,则比较 array2 的对应元素;
- 依此类推,直到最后一个数组列。
注意:
- 参与排序的数组元素必须是可排序类型或者 JSON 类型。
- 所有参与排序的数组元素大小必须与原始数组保持一致(NULL 除外)。
示例说明:
给定以下四个数组:
array0 = [1, 2, 3, 4, 5]
array1 = [6, 5, 5, 5, 4]
array2 = ["d", "b", "a", "b", "4"]
array3 = ["2023-01-01", "2023-01-04", "2023-01-03", "2023-01-05", "2023-01-02"]
排序步骤:
- 比较 array1:
- array1 排序后的索引顺序是 [4, 2, 3, 1, 0],因为 4 < 5 < 5 < 5 < 6。
- 对于 array1 中相同的元素 [5, 5, 5],比较 array2:
- array2 中 [a, b, b] 排序后的顺序是 [2, 3, 4],因为 a < b = b。
- 对于 array1 和 array2 中相同的元素 [b, b],比较 array3:
- array3 中 [2023-01-04, 2023-01-05] 排序后的顺序是 [2, 4],因为 2023-01-04 < 2023-01-05。
最终对数值array0的排序结果
array0:[5, 3, 2, 4, 1]
语法
array_sortby(array0, array1)
array_sortby(<lambda function>, array0 [, array1...])
array_sortby(array0, array1, [array2, array3...])
-
array_sortby(array0, array1)
根据
array1
的键值数组元素对array0
进行升序排序。 -
array_sortby(<lambda_function>, array0 [, array1...])
根据
lambda_function
生成的键值数组元素,对array0
进行升序排序。 -
array_sortby(array0, array1, [array2, array3...])
根据多个数组列(array1、array2、array3 等)的值对 array0 进行升序排序。排序规则是:首先比较 array1 的对应元素,如果相同则比较 array2 的对应元素,依此类推,直到最后一个数组列
参数说明
array0
:需要排序的数组,支持的数据类型为 ARRAY,或者null
。数组中的元素必须为可排序的元素。array1
:用于排序的键值数组,支持的数据类型为 ARRAY,或者null
。lambda_function
:lambda 函数,用于生成排序键值数组。array1, [array2, array3...]
:用于排序的键值数组,支持的数据类型为 ARRAY,或者null
。
返回值说明
返回的数据类型为 ARRAY。