AutoIt教程:6. 数组

by xiaolai on 2010/05/01 · 2 comments

in Auto-It

变量(Variable)是用来保存一个数据的,数组(Array)是用来保存一系列数据的。比如,我们可以把一个班里所有人的名字保存到一个数组之中。事实上,你可以把数组理解为“最简单形式的数据库”,或者“只有一列数据的表单”。

Dim $name[5]
$name[0] = "Tom"
$name[1] = "Jerry"
$name[2] = "Mike"
$name[3] = "Joey"
$name[4] = "Jane"

注意,方括号内的“下标”,是zero-based,即,从零开始。所以,在第1行代码中我们定义了一个总计有5个元素的数组,名称是$name,第一个元素用$name[0]表示,最后一个元素用$name[4]表示。数组中的每一个元素,相当于一个变量,可以保存一个数据。

用一个循环语句,就可以遍历(逐一访问,或读,或存)所有元素:

For $i = 0 To 4
    MsgBox(0, $i, $name[$i], 1)
Next

数组的操作向来很麻烦。不过,幸运的是,AutoIt安装的过程中提供了很多UDF,即所谓的“用户自定义函数库”。UDF,是User Defined Function的首字母缩写。AutoIt是免费开源的软件,所以有很多人参与了开发过程,同时写了许多各式各样的,能够完成特定功能的函数。一旦你需要使用数组,最方便的方法就是直接调用一些UDF中的函数。

引用UDF函数库的方法是在程序开头添上这样一句:

#include <Array.au3>

之后,你就可以用_ArraySort()为某个数组排序,用_ArraySwap()为某两个元素调换位置,用_ArrayDisplay()显示一个数组内容,或者用_ArrayUnique()查询某个元素的值在整个数组中是否是唯一的……

UDF中关于数组管理的所有函数……

如果一个数组是“动态形成的”,或者,在程序运行过程中,数组增加或减少了一些元素,那么我们可以用UBound()函数得知某个特定数组的元素数量。

新建一个AutoIt文件,将其命名为Testing15.au3,输入以下代码,并按F5运行,查看结果:

#include <Array.au3>
 
Dim $name[5]
$name[0] = "Tom"
$name[1] = "Jerry"
$name[2] = "Mike"
$name[3] = "Joey"
$name[4] = "Jane"
 
For $i = 0 To 4
    MsgBox(0, $i, $name[$i], 1)
Next
 
_ArrayDisplay($name)
 
_ArrayAdd($name, "Mary")
 
_ArrayDisplay($name)
 
MsgBox(0, "Info", "Now the array $name has " & UBound($name) & " elements...")
 
_ArraySort($name)
 
_ArrayDisplay($name)
 
_ArrayReverse($name)
 
_ArrayDisplay($name)

注意:当_ArrayDisplay()显示对话框的时候,程序会暂停,知道你按关闭按钮关闭该对话框之后,程序将继续运行。

作业

把所有UDF中的关于数组管理的函数都拿出来调用、试验一遍。与此同时,还要“硬着头皮”精读每个函数的帮助文档……

提示:调用每个函数之后,都可以调用_ArrayDisplay()来查看数组的内容变化……

{ 2 comments… read them below or add one }

不如相忘于江湖 January 27, 2011 at 10:01

1)AutoIt使用数组时必须先声明数组的长度
2)其次,比如你声明了一个3个长度的数组,然后往这个数组里动态添加两个元素,但是你用UBound()函数返回的长度依然是3,就是你事先声明的长度。此处是个坑,小心导致莫名其妙的BUG

Reply

不如相忘于江湖 January 27, 2011 at 10:10

被逼无奈,想了这么一招,可以达到类似于动态数组的功能。
先声明一个长度为1的数组,然后再程序中使用_ArryAdd动态添加元素,最后,再用_ArryDelete($array,0)删除第一个空元素。我也是刚刚被逼想出来的。

Reply

Leave a Comment

Previous post:

Next post: