使Array数组对象以0为第一个元素

在AutoHotkey中,数组对象Array是以1为第一个元素的,而在其他一些语言(如c++、JavaScript等)中是以0为第一个元素的,一些同时使用其他语言的ahker会感到不习惯,可以通过修改Array类的__Item属性和__Enum方法来改变这一行为。在脚本的自动执行段添加以下几行即可实现这一需求

/************************************************************************
 * @file: array_zero_based_index.ah2
 * @description: 使Array数组对象以0为第一个元素
 * @author thqby
 * @date 11/23/2020
 * @version 1.0
 ***********************************************************************/
; 修改__Item属性后可实现arr[0]访问数组的第一个元素
Array.Prototype.DefineProp('item', Array.Prototype.GetOwnPropDesc('__item')), Array.Prototype.DefineProp('__item', {get: (s, i) => s.item[i + (i >= 0)], set: (s, v, i) => s.item[i + (i >= 0)] := v})
; 修改__Enum方法后可实现for [i,] v in arr循环中i以0开始
Array.Prototype.DefineMethod('__enum', (s, i) => (i = 1 ? (i := 0, (ByRef v) => i < s.Length ? (v := s.item[i + 1], i += true) : false) : (i := 0, (ByRef k, ByRef v) => (i < s.length ? (k := i, v := s[i], i += true) : false))))

示例:

arr:=[4,56,3,2,65]
msgbox arr[0] ; 4
arr[0]:=89 ; [89,56,3,2,65]
for i, v in arr
  msgbox i ' ' v
; 0 89
; 1 56
; 2 3
; 3 2
; 4 65

给TA买糖
共{{data.count}}人
人已赞赏
学习

1.1第一个Autohotkey程序-快捷键打开(www.autoahk.com)网址-AutoAHK编辑器教程(新建脚本、运行脚本)

2020-11-22 16:01:36

AHKV2学习

正则替换Ex、正则全局匹配模式

2020-11-24 13:19:31

3 条回复 A文章作者 M管理员
  1. godefy

    请问v1也可以这样改吗?

    • thqby

      不行

    • godefy

      请问v1里怎么能创建出下标为1的ComObjArray呢?(ComObjArray默认的下标为0)

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索