array|译:Gamemaker Studio 2.3 语法详解( 八 )


show_debug_message (arr);// [1, 2]
array_delete (array,index,count)
array_delete(array, index, count) 删除数组中某一偏移处的元素
vararr =[1,2,3,4];
array_delete (arr,1,2);
show_debug_message (arr);// [1, 4]
array_sort (array,sorttype_or_function)
array_sort(array, sorttype_or_function) 对一个数组进行升序/降序排序(就像 ds_list_sort 一样) 。
vararr =[5,3,1,2,4];
array_sort (arr,true);
show_debug_message (arr);// [1, 2, 3, 4, 5]
或通过提供的“ comparator ”函数传递每个元素
varstrings =["plenty","1","three","two"];
array_sort (strings,function(a,b){
returnstring_length(a)-string_length(b);
});
show_debug_message(strings);// [ "1","two","three","plenty" ]_execute_ext
记得我们以前通过 switch 语句来根据某种情况 _execute 么?现在不需要了 。
vararr =[1,2,3,4];vartest =function{
varr ="";
for(vari =0;i <argument_count;i++){
if(i >0)r +=", ";
r +=string(argument[i]);
}
show_debug_message(r);
}
_execute_ext(test,arr);// `1, 2, 3, 4` - 整个 array
_execute_ext (test,arr,1);// `2, 3, 4` - 从偏移量开始
_execute_ext (test,arr,1,2);// `2, 3` - 偏移量和计数数据结构检查
增加了四个函数 , 用于检查 ds_list 和 ds_map 项是否为 map/list :
ds_list_is_map(id,index)
ds_list_is_list (id,index)
ds_map_is_map (id,key)
ds_map_is_list (id,key)
这可以验证你正在访问的东西(特别是对于 json_decode 输出)确实是一个 map/list
ds_map functions
增加了两个函数用于枚举 map 的键/值:
ds_map_values_to_array(id,?array)
ds_map_keys_to_array (id,?array)
这些对于迭代大型 map 来说是很方便的 , 特别是如果你希望在迭代过程中修改它们(这就是 ds_map_find_* 函数有未定义行为的地方) 。
类型检查功能
is_struct , is_method 已经被加入 , 用于检查一个值是否是一个结构或一个绑定的函数 , 但还有一个额外的功能--is_numeric 将检查一个值是否是任何数字类型( real , int32 , int64 , bool ) 。
突破性改变
需要注意的几件事:
2d array functions
由于 2d 数组函数现在已被废弃 , 它们翻译成如下 。

  • array_length_1d(arr) ? array_length(arr)
  • array_height_2d(arr) ? array_length(arr)
  • array_length_2d(arr, ind) ? array_length(arr[ind])
这里的意思是 array_height_2d 并不关心你的数组是否真的是 2D 的(里面有子数组) , 因此在 1D 数组上使用时会返回意外的值--例如 array_height_2d([1, 2, 3]) 是 3 。
你可以通过以下方式来解决这个问题
functionarray_height_2d_fixed(arr){
varn =array_length(arr);

推荐阅读