使用此函数,您可以按升序或降序对数组进行排序,或者使用自定义函数定义排序顺序。该函数要求您提供要排序的数组,然后执行以下操作之一:
此函数将修改提供的原始数组的内容。要创建排序副本,请使用 array_copy() 先复制数组,然后将其传递到此函数中。
如果使用自定义函数进行排序,则它必须接受2个参数,这2个参数将分别接收当前元素和下一个元素的值。该函数应返回以下任何值以影响排序顺序(其中elm1是当前元素,elm2是下一个元素):
注意 1 您的自定义函数返回的值必须是整数。小于 1 的浮点值将被读取为 0,因此,如果您的函数使用浮点值,则必须使用 sign() 或 round()。
注意 2 当您的自定义函数为一对元素返回 0 (或使用升序 / 降序时该对相等) 时,可能不会保留该对的顺序,因为所使用的排序算法 (qsor) 不稳定。
如果数组包含一组字符串,则在使用默认升序/降序排序类型时,将根据英文字母表按字母顺序对字符串进行排序。所有其他数据类型将根据其数值进行排序,其确切值将取决于数据类型本身(例如,缓冲区数组将根据其索引的数值进行排序)。
array_sort(variable, sorttype_or_function);
参数 | 类型 | 描述 |
---|---|---|
variable | Array | 保存数组的变量。 |
sorttype_or_function | Boolean or Script Function/Method | 排序类型( true 表示升序或 false 表示降序)或用于排序的函数引用。 |
N/A
var _a = [10, 9, 8, 7, 6, 5];
array_sort(_a, function(elm1, elm2)
{
return elm1 - elm2;
});
上面的代码使用自定义排序函数对数组进行升序排序。排序函数将两个数组元素作为 elm1 和 elm2 ,然后对它们进行减法。如果 elm1 大于 elm2 ,则减法得出一个正数,将 elm1 推至 elm2 之后,因此按升序排列。
下面是一个扩展的例子:
var _xx, _yy, _a;
for (var i = 0; i < 10; i++)
{
_xx = irandom(room_width);
_yy = irandom(room_height);
_a[i] = instance_create_layer(_xx, _yy, layer, obj_Bullet);
}
show_debug_message(_a);
var _f = function(inst1, inst2)
{
return inst1.x - inst2.x;
}
array_sort(_a, _f);
show_debug_message(_a);
上面的代码将创建一个由10个实例组成的数组,这些实例放置在房间内的随机位置。调试消息将显示如下内容:
[ 100003,100004,100005,100006,100007,100008,100009,100010,100011,100012 ]
然后,代码创建一个方法,用于 array_sort() 函数,该函数返回房间中实例的每个X位置之间的差异。然后使用该方法运行 array_sort() 函数,将实例从最低到最高按X排序。数组的输出将看起来像这样:
[ 100011,100004,100009,100006,100012,100008,100010,100005,100007,100003 ]