[讨论]话说AU3的数组.很不好用..
可能是AU3数组过分严紧.数组的索引只能为数字.还要先定义长度..先说定义长度.当然是可以用关键字ReDim来重新改变数组长度.但还是很麻烦.
数组个人认为他是做为一个变量的组合.如果她不能变就没有太多义意
再说索引只能为数字.先看以下例子.Dim $Arr
$Arr = "A"
$Arr = "B"
MsgBox(0, 0, UBound($Arr))不管真实数组里有几个..UBound()都返回先定义的长度Dim $Arr
$Arr = "A"
$Arr = "B"如果例子上$Arr索引超过或等于定义的长度就会出错..
这个还说明数组索引只能在定义的长度范围内..
下面我们来分析一个很长见的程序..
一个班级学生分组
表A存分组.如A组B组, 表的结构为 组的ID=Gid 还有组的名称 GroupName
表B存学生名字等信息 表的结构为 ID , 学生姓名Name 组的ID=Gid
由于表A在添加和删除过程中不可能在保持期ID 为 1.2.3.4.....有序下去
如果要像PHP一样操作列出学生信息是不可能_SQLite_Query(-1, "SELECT Gid, GroupName FROM Group", $hQuery)
While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
$GroupArr[$aRow] = $aRow
WEnd
Dim $AllInfo = ""
_SQLite_Query(-1, "SELECT id, Name, Gid FROM Info", $hQuery)
While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
$AllInfo &= $aRow &"|"& $aRow &"|"& $GroupArr[$aRow] & @CRLF
WEnd
MsgBox(0, 0, $AllInfo)现在的数组模式要么就要以学生表B中的Gid一个一个的去查询表A的组名.老是查询数据库那是不好的.
要么就要用两个数组.一个存Gid.一个存组名称.通过_ArraySearch得到Gid索引举出组名称
所以在写程序过程中很麻烦..而PHP的数组索引还可以是字符串..
真希望AU3数组能改变一下 用一个SQL语句不行吗?
表A:
组号 组名
Gid GroupName
表B:
学号 姓名 组号
Sid Name Sgid
SELECT Sid, Name, Gid,GroupName
FROM B
LEFT JOIN A ON Sgid =GID
WHERE Name="张三" 用一个SQL语句不行吗?
表A:
组号 组名
Gid GroupName
表B:
学号 姓名 组号
Sid ...
zps26 发表于 2010-11-2 10:12 http://www.autoitx.com/images/common/back.gif
这个是行..也有更多的方法..我只是弄个小例子..只是想说.如果数组支持无序和字符索引.我们在写程序时会方便很多..
例如在用这个学生信息程序来说..
我们要新建一个学生信息
那就会用到 GUICtrlCreateCombo() 来列出所有组.供录入员选择..
由于GUICtrlCreateCombo()的索引也是有序的..我们是无法通获取选择的GUICtrlCreateCombo()索引来得到组的ID
只有通过查询WHERE GroupName='& $Combo &' 或在举出GUICtrlCreateCombo()列表时多弄个数组做为保存Gid的
在PHP中我们可以用array_flip()函数交换数组中的键和值..在以$ArrGroup[$_POST['Combo']]得到Gid 确实如此。
AU3中只存在有序数组,说实话基本的应用已经足够了。但好像没有提供散序数组。
我在官网找到过一个联合数组,不知道楼主有没有研究过。
地址如下:http://www.autoitscript.com/forum/index.php?showtopic=59174 原来是这样的啊,我说我的程序为啥出错呢。我总想先声明一个空数组,就是先不指定数组长度,用select语句动态的往数组里添加数据。结果出错,原来AutoIt必须先声明数组的长度啊,这确实麻烦了点 楼主可以这样做,先声明一个长度为1的数组,然后再程序中使用_ArryAdd动态添加元素,最后,再用_ArryDelete($array,0)删除第一个空元素。我也是刚刚被逼想出来的。 回复 6# 只为关注
太可爱了你{:face (411):} 回复 6# 只为关注
俺一向也是这么干的 ^_^ 回复 5# 只为关注
不用吧 如果是 SQL 語法的 陣列不用宣告 直接用
如
$A=$conn.Execute ("SELECT * FROM 表A").GetRows
$A 就會變成一個二維數組 回复 1# 阿米啦啦
不用吧 如果是 SQL 語法的 陣列不用宣告 直接用
如
$A=$conn.Execute ("SELECT * FROM 表A").GetRows
$A 就會變成一個二維數組 Map functions Reference
Below is a complete list of the functions available in AutoIt. Click on a function name for a detailed description.
Function Description
MapAppend Add an element to a Map variable.
MapExists Determine whether a key exists within a Map.
MapKeys Returns an array holding the keys within a Map.
MapRemove Remove a key and its associated value from a Map.
用这个吧 这个主题好像没讨论完阿.......
两年过去了,有什么新变化吗
{:face (125):} 嗯 数组指针呢谁来解释解释
页:
[1]