AutoHotKey(简称ahk)中的对象和数组

createh51个月前 (02-01)技术教程16




AutoHotKey(简称ahk)中的对象和数组

本篇说明的是AHK中的对象数组,在编写一些稍微复杂的代码时,必不可少需要一种能够组织数据的容器,如果每个数据都不得不创建一个变量,用起来会很麻烦,而且看起来也乱糟糟的。

ahk提供了一个对象的概念,而且它并没有区分对象和数组,或者说在ahk里,数组就是一种比较特别的对象而已(但使用的时候和对象的操作其实还是有所不同)。

对象的概念和其他语言类似,核心都是“键”和“值”。不管是键还是值,都是没有任何限制的,可以是数字、可以是文本,甚至可以是另一个数组。例如当一个对象被称之为数组,那么它的键就是从1开始递增的数字(注意这里的数组下标不是从0开始)。

接下来的内容相对前面的比较长,先给个预警

创建对象

创建对象同样也有几种不同的方式,因为它和数组合并了,所以我们会有点眼熟。

方括号语法:

MyObject := ["one", "two", "three", 17]

这种就是典型数组初始化的语法,键也默认是从1开始递增的自然数。

大括号语法:

Banana := {"Color": "Yellow", "Taste": "Delicious", "Price": 3}

这种是对象初始化的语法,指定了键和值,注意这里的键也是要加双引号的

数组函数语法:

MyObject := Array("one", "two", "three", 17)

这种声明方式和java有点类似,相当于调用了Array的构造函数进行初始化,其实这种和方括号语法是一样的。

对象函数语法:

Banana := Object("Color", "Yellow", "Taste", "Delicious", "Price", 3)

这种也和大括号语法是一样的,只是它采用了函数的形式,相对使用的比较少。

使用对象

在操作对象的属性时,也有两种语法

Temp:=Banana["Pickled"] 或 Temp:=Banana.Pickled

方括号或句号,在我们使用时也是任选其一一直使用即可,推荐用方括号法。

插入新的键值对

在已经声明好的对象或数组中插入新的键值对也有几种不同的方式

MyObject["NewerKey"] := 3.1415
MyObject[3] := 3.1415 
或
MyObject.NewKey := "Shiny" 
MyObject.3:= "Shiny"

方括号或句号,在我们使用时也是任选其一一直使用即可,推荐用方括号法。

除了这两种,还有两个函数插入法可供我们使用,但是一般是针对数组型对象的:

Push

MyObject.Push(Value1, Value2, Value3...)

push的作用是追加新的值到数组MyObject的尾部,或者说是将插入的值放在最高整数键+1的位置,可以一次插入多个值。

InsertAt

MyObject.insertAt(Index, Value1, Value2, Value3...)

Index(索引)为任意的整数键,这种方式会在指定的索引处插入值,并且可以一次插入多个值,只是这会导致插入点后面所有更高数字的整数键(包括插入位置的整数键)往后移动。

举例说明就是有一个["one", "two", "three", 17]的数组,对它使用MyObject.insertAt(4, "four", "five")后,它就会变成["one", "two", "three", "four", "five", 17],17这个值的键也从4变成了6

注意:由于并没有区分数组和对象,所以就算是数组,也可以插入一个键为name,值为李四的属性,完全可以混合使用。所以在说明两种函数时,用的都是最高整数键等等的词。这种情况下,使用push和insertAt插入新值时,它们也只会影响数组里键为整数的值。

删除键值对

通过调用对象的delete方法并传入要删除的键名,可以删除指定的键值对,并返回该键值对的值。

RemovedValue := MyObject.Delete(AnyKey)

这个delete方法还有个重载方法,适用于整数键的数组,通过指定开始和结束的键值,删除包括它们在内的中间所有整数键的键值对。返回值是被删除的键的数量。

NumberOfRemovedKeys := MyObject.Delete(FirstKey, LastKey)

例如你指定了删除1到4的键,但是这个对象数组中不存在键为2的值,这样返回值就是3。

同样还有两个函数删除法可供我们使用,一般也是针对数组型对象的:

Pop

MyObject.Pop()

和push相对,作用是删除MyObject最高整数位的键值对,并返回它的值。

RemoveAt

RemovedValue := MyObject.RemoveAt(Index) 
或
NumberOfRemovedKeys := MyObject.RemoveAt(Index, Length)

RemoveAt也有两种用法,但也只能用于整数键的对象

第一种是删除指定索引的键值对,并返回它的值。

第二种是批量删除,指定要删除的键的索引Index和要删除的长度Length,就会删除从Index 到 Index + Length - 1 之间的所有键(-1是因为包括了指定索引的键自身),并返回被删除的键的数量。删除完毕后,更高数字或整数的键将向下填充空缺,这和InsertAt的原理是一样的。

AHK中的对象和数组的学习就结束了,如果还想了解更多,可以从我的主页点进去看其他文章,都是干货~

相关文章

Java数组数据的操作之检查日期格式是否正确

程序源代码/***Title:数组数据的操作*@author author*version 0.1*/public class myArray034{//初始化数组变量char[] cNum = {'...

Oracle探究_JAVA存储过程_开发指引《中》

HLS HLS/MD1201.5 返回PLSQL集合变量有一种业务场景是在主逻辑处理完后需要返回多个数据。结合JAVA不能类似PLSQL存储过程有OUT参数,只能开发返回函数形式的Method,以下将...

Java没有指针,只有引用,如何关联变量,实现各类数据结构?

C语言离不开指针,指针作为一种派生类型,是数据关联的一种主要手段(实现顺序存储和链式存储)。数组下标运算也只是指针算术运算的语法糖。其中数组名是一个常量(为安全考量),数组下标运算替换为指针运算,由C...

详解Java安全——安全管理器、访问控制器和类装载器

安全管理器:SecurityManager安全管理器在Java语言中的作用就是检查操作是否有权限执行。是Java沙箱的基础组件。我们一般所说的打开沙箱,也是加-Djava.security.manag...