找回密码
 加入
搜索
查看: 2044|回复: 14

[AU3基础] 如何 表示 数组 中的数组【已解决】

  [复制链接]
发表于 2017-4-1 02:03:31 | 显示全部楼层 |阅读模式
本帖最后由 fenhanxue 于 2017-4-1 22:27 编辑
Local $a[2] = [1,2]
Local $b[2] = [3,4]

Local $c[2]

$c[0] = $a
$c[1] = $b

Local $d = $a



;以        $a[1] = 2 为例子
;要表示  $a[1] = 2 
;        1)如果用d来表示,可以这样写,即 
        MsgBox(0,' $a[1]的值为',$d[1])

;        2)如何用c来表示?这样写好像是错误的
        MsgBox(0,' $a[1]的值为',$c[0][1])
答案:
需要一个()   即

MsgBox(0,' $a[1]的值为',$c[0][1])
发表于 2017-4-1 10:21:18 | 显示全部楼层
本帖最后由 afan 于 2017-4-1 13:42 编辑

较高版本的Au3支持直接引用表达式的元素,因此可以直接写为 MsgBox(0,' $a[1]的值为',($c[0])[1])

否则Au3版本不支持则需再转一次
Local $c1 = $c[0]
MsgBox(0,' $a[1]的值为',$c1[1])
发表于 2017-4-1 13:16:20 | 显示全部楼层
回复 2# afan

也许楼主想 转换成二维数组,  至少我看到我就想这么做。
发表于 2017-4-1 13:39:31 | 显示全部楼层
回复 1# fenhanxue

还有一种冷门用法

Local $a[2] = [1, 2]
Local $b[2] = [3, 4]
Local $c[2]

$c[0] = $a
$c[1] = $b

Local $d = $a

MsgBox(0, ' $a[1]的值为', $d[1])
MsgBox(0, ' $a[1]的值为', ($c[0])[1])
发表于 2017-4-1 13:43:16 | 显示全部楼层
回复  afan

也许楼主想 转换成二维数组,  至少我看到我就想这么做。
heroxianf 发表于 2017-4-1 13:16



    这跟二维数组是两回事…
发表于 2017-4-1 13:49:32 | 显示全部楼层
回复 5# afan


    其实是我想这么做,自己还不知道怎么弄
发表于 2017-4-1 14:08:48 | 显示全部楼层
回复  afan


     其实是我想这么做,自己还不知道怎么弄
heroxianf 发表于 2017-4-1 13:49



    循环填充
#Include <Array.au3>

Local $a[2] = ['a1', 'a2']
Local $b[3] = ['b1', 'b2', 'b3']

Local $c = _2dArr($a, $b)
_ArrayDisplay($c)

Func _2dArr($a, $b)
        If Not IsArray($a) Or Not IsArray($b) Then Return SetError(1)
        Local $iMax = UBound($a), $c = $a
        If UBound($b) > $iMax Then $iMax = UBound($b)
        ReDim $c[$iMax][2], $a[$iMax], $b[$iMax]
        For $i = 0 To $iMax - 1
                $c[$i][0] = $a[$i]
                $c[$i][1] = $b[$i]
        Next
        Return $c
EndFunc   ;==>_2dArr
发表于 2017-4-1 15:04:47 | 显示全部楼层
回复 7# afan


    谢谢A大  下来认真学习
发表于 2017-4-1 22:19:40 | 显示全部楼层
回复 8# heroxianf

二維也行吧  舊版的 無法支援這個表示法

但是新版的 可以呀!!

DIM $a[2][2]
$a[0][0]="A0"
$a[0][1]="A1"
$a[1][0]="B0"
$a[1][1]="B1"
_ArrayDisplay($a)

DIM $b[2][2]

$b[0][0]="Y0"
$b[0][1]=$a
$b[1][0]="Z0"
$b[1][1]="Z1"
_ArrayDisplay($b)

MsgBox(0,0, ($b[0][1])[1][1]) 
 楼主| 发表于 2017-4-1 22:25:12 | 显示全部楼层
回复 4# heroxianf


原来加个()就能用c来正确表示了,学到了新技能。。。
发表于 2017-4-2 11:48:29 | 显示全部楼层
回复 9# kk_lee69

是的 新版才可以,不过我用3.3.12可以执行、也是自己那个时候想这么输出
发表于 2017-4-2 22:51:05 | 显示全部楼层
回复 2# afan
我发现用这种表示方法可以显示但是不能赋值啊??
Global $aArray[2] = [0, 1]
$aArray[1] = $aArray
MsgBox(0, "", ($aArray[1])[0] & @CRLF & ($aArray[1])[1])
($aArray[1])[0] = 1
($aArray[1])[1] = 2
MsgBox(0, "", ($aArray[1])[0] & @CRLF & ($aArray[1])[1])
发表于 2017-4-2 23:14:31 | 显示全部楼层
回复  afan
我发现用这种表示方法可以显示但是不能赋值啊??
帆船 发表于 2017-4-2 22:51



    应该是的,只能引用,不能变更

评分

参与人数 1金钱 +20 收起 理由
dingcool + 20 请前辈帮忙啊!

查看全部评分

发表于 2017-4-6 22:33:27 | 显示全部楼层
我想把C++代码转成autoit代码
    c代码如下:
        byte M[] = {0,1};
        char* Zfc[] = {"zifuchuan1","zifuchuan2"};
        bool = func(M, Zfc);



func函数是dll中的,我想用dllcall调用,怎么把两个字符串传递到func中
发表于 2017-4-6 22:34:06 | 显示全部楼层
回复 13# afan


    我想把C++代码转成autoit代码
   
        byte M[] = {0,1};
        char* Zfc[] = {"zifuchuan1","zifuchuan2"};
        bool = func(M, Zfc);



func函数是dll中的,不能重写。
我想用dllcall调用,怎么把两个字符串传递到func中
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-19 20:39 , Processed in 0.082684 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表