AutoIt数组初始化程序可以处理不同的数据类型吗?

时间:2014-02-04 22:57:37

标签: multidimensional-array initialization autoit

我目前面临一个奇怪的问题,我无法找到原因。我正在尝试在AutoIt中创建一个多维数组并使用值初始化它。记住变体数据类型,应该可以创建一个数组

  • 由多个元素组成(当然)
  • 每个元素是另一个包含2个元素(具有不同类型)的数组
  • 这两个元素是一个整数,另一个是4个整数的数组

所以基本上我想要一个键/值对数组,其中值是一个数字数组。我知道在这种情况下,“值”被视为一个简单的变量,而不是一个可直接访问的数组 - 这就是我想要的。

但是,如果我尝试

Global Const $x[3][2] = [ _
                          [1, [11,12,13,14] ], _
                          [2, [21,22,23,24] ], _
                          [3, [31,32,33,34] ] _
                        ]

我得到了

error: syntax error
                    [1, [
                    ~~~~^
error: syntax error
                    [2, [
                    ~~~~^
error: syntax error
                    [3, [
                    ~~~~^

要么我缺少某些内容,要么初始化程序没有意识到我不想要3个维度而只是2个并将4个项目数组作为单个变量处理。

有人可以建议首选解决方案吗?或者我应该忘记这个组合解决方案,简单地使用每个包含5个元素的数组,例如

Global Const $x[3][5] = [ _
                          [1, 11,12,13,14 ], _
                          [2, 21,22,23,24 ], _
                          [3, 31,32,33,34 ] _
                        ]

并处理代码中的差异?

2 个答案:

答案 0 :(得分:1)

我认为这是不可能的。你可以得到这个:

#region    ;************ Includes ************
#include <Array.au3>
#endregion    ;************ Includes ************

Global $a[4] = [11, 12, 13, 14]
Global Const $x[3][2] = [ _
        [1, $a], _
        [2, "21,22,23,24"], _
        [3, "31,32,33,34"] _
        ]

_ArrayDisplay($x)

; Getting the values of [0][1]
For $i = 0 To UBound($a) - 1
    ConsoleWrite($a[$i] & @CR)
Next

$re = StringSplit($x[1][1], ',', 2)
For $i = 0 To UBound($re) - 1
    ConsoleWrite($re[$i] & @CR)
Next

答案 1 :(得分:1)

这是可能的,但您需要单独初始化内部数组。

Global $arr[3][2]
Global $a1[4] = [11,12,13,14]  ;these are the inner arrays
Global $a2[4] = [21,22,23,24]
Global $a3[4] = [31,32,33,34] 
$arr[0][0] = 1
$arr[0][1] = $a1 ;put the inner arrays into the outer array
$arr[1][0] = 2
$arr[1][1] = $a2
$arr[2][0] = 3
$arr[2][1] = $a3

Global $arrTemp
For $i = 0 to UBound($arr)-1
    $arrTemp = $arr[$i][1]
    For $j = 0 To UBound($arrTemp)-1
        ConsoleWrite($arr[$i][0] & ': ' & $arrTemp[$j] & @CRLF)
    Next
Next

这将输出:

1: 11
1: 12
1: 13
1: 14
2: 21
2: 22
2: 23
2: 24
3: 31
3: 32
3: 33
3: 34