array_sort

使用此函数,您可以按升序或降序对数组进行排序,或者使用自定义函数定义排序顺序。该函数要求您提供要排序的数组,然后执行以下操作之一:

此函数将修改提供的原始数组的内容。要创建排序副本,请使用 array_copy() 先复制数组,然后将其传递到此函数中。

使用自定义函数

如果使用自定义函数进行排序,则它必须接受2个参数,这2个参数将分别接收当前元素和下一个元素的值。该函数应返回以下任何值以影响排序顺序(其中elm1是当前元素,elm2是下一个元素):

注意 1 您的自定义函数返回的值必须是整数。小于 1 的浮点值将被读取为 0,因此,如果您的函数使用浮点值,则必须使用 sign()round()

注意 2 当您的自定义函数为一对元素返回 0 (或使用升序 / 降序时该对相等) 时,可能不会保留该对的顺序,因为所使用的排序算法 (qsor) 不稳定。

如果数组包含一组字符串,则在使用默认升序/降序排序类型时,将根据英文字母表按字母顺序对字符串进行排序。所有其他数据类型将根据其数值进行排序,其确切值将取决于数据类型本身(例如,缓冲区数组将根据其索引的数值进行排序)。

 

语法:

array_sort(variable, sorttype_or_function);

参数类型描述
variableArray保存数组的变量。
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;
});

上面的代码使用自定义排序函数对数组进行升序排序。排序函数将两个数组元素作为 elm1elm2 ,然后对它们进行减法。如果 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 ]