将一维数组添加到现有二维数组
Add 1D array to existing 2D array
我想合并一维数组。如何更改下面的 AutoIt 脚本以访问作为新生成的二维数组的元素?测试脚本是:
#Include <Array.au3>
Local $_arr1=["name1","addr1","phone1"]
Local $_arr2=["name2","arr2","phone2"]
_make2darray($_arr1,$_arr2)
Func _make2darray($_arr1,$_arr2)
Local $_2darray=[$_arr1,$_arr2]
_ArrayDisplay($_2darray)
_ArrayDisplay($_2darray[0])
_ArrayDisplay($_2darray[1])
ConsoleWrite($_2darray[0][0])
EndFunc
$_2darray
输出为:
Row | Col 0
[0] |{Array}
[1] |{Array}
$_2darray[0]
输出为:
Row |Col 0
[0] |name1
[1] |addr1
[2] |phone1
$_2darray[1]
输出为:
Row |Col 0
[0] |name2
[1] |arr2
[2] |phone2
但是访问二维数组时出错:
ConsoleWrite($_2darray[0][0])
ConsoleWrite(^ ERROR
Exit code: 1 Time: 239.1
我该如何解决这个问题?
您创建了一个一维数组,其中填充了其他一维数组。
#Include <Array.au3>
Local $_arr1=["name1","addr1","phone1"]
Local $_arr2=["name2","arr2","phone2"]
Local $_2dArray = [$_arr1 , $_arr2]
_ArrayDisplay($_2dArray[0])
_ArrayDisplay($_2dArray[1])
… an error occurs accessing the 2D array …
它将数组分配给另一个一维数组的元素,这些元素只能被隔离访问;喜欢:
$aArray = $_2dArray[0]
_ArrayDisplay($aArray)
或 _ArrayDisplay($_2dArray[0])
。但随后将其视为 2 dimensional array,因此出现 Array variable has incorrect number of subscripts or subscript dimension range exceeded.
-error.
How can I fix below AutoIt script to allow accessing elements of the newly generated 2D array?
根据Documentation - Keywords - ReDim
:
Resize an existing array.
示例:
#include <AutoItConstants.au3>; UBound() constants.
#include <Array.au3>; _ArrayDisplay()
Global Const $g_aArray1D_1 = ['name1', 'address1', 'phone1']
Global Const $g_aArray1D_2 = ['name2', 'address2', 'phone2']
Global $g_aArray2D = [['NAME', 'ADDRESS', 'PHONE'] ]
_ArrayAdd1DtoArray2D($g_aArray2D, $g_aArray1D_1)
_ArrayAdd1DtoArray2D($g_aArray2D, $g_aArray1D_2)
_ArrayDisplay($g_aArray2D)
Func _ArrayAdd1DtoArray2D(ByRef $aArray2D, Const $aArray1D)
Local Const $iRows = UBound($aArray2D, $UBOUND_ROWS)
Local Const $iCols = UBound($aArray2D, $UBOUND_COLUMNS)
; Resize array:
ReDim $aArray2D[$iRows + 1][$iCols]
For $i1 = 0 To $iCols - 1
; Add values of 1D array to new row of 2D array:
$aArray2D[$iRows][$i1] = $aArray1D[$i1]
Next
EndFunc
或使用_ArrayAdd()
(转换为字符串):
#include <Array.au3>; _ArrayToString() _ArrayAdd() _ArrayDisplay()
Global Const $g_aArray1D_1 = ['name1', 'address1', 'phone1']
Global Const $g_aArray1D_2 = ['name2', 'address2', 'phone2']
Global $g_aArray2D = [['NAME', 'ADDRESS', 'PHONE'] ]
_ArrayAdd($g_aArray2D, _ArrayToString($g_aArray1D_1))
_ArrayAdd($g_aArray2D, _ArrayToString($g_aArray1D_2))
_ArrayDisplay($g_aArray2D)
现在可以使用 $g_aArray2D[ x ][ x ]
访问值。
我想合并一维数组。如何更改下面的 AutoIt 脚本以访问作为新生成的二维数组的元素?测试脚本是:
#Include <Array.au3>
Local $_arr1=["name1","addr1","phone1"]
Local $_arr2=["name2","arr2","phone2"]
_make2darray($_arr1,$_arr2)
Func _make2darray($_arr1,$_arr2)
Local $_2darray=[$_arr1,$_arr2]
_ArrayDisplay($_2darray)
_ArrayDisplay($_2darray[0])
_ArrayDisplay($_2darray[1])
ConsoleWrite($_2darray[0][0])
EndFunc
$_2darray
输出为:
Row | Col 0
[0] |{Array}
[1] |{Array}
$_2darray[0]
输出为:
Row |Col 0
[0] |name1
[1] |addr1
[2] |phone1
$_2darray[1]
输出为:
Row |Col 0
[0] |name2
[1] |arr2
[2] |phone2
但是访问二维数组时出错:
ConsoleWrite($_2darray[0][0])
ConsoleWrite(^ ERROR
Exit code: 1 Time: 239.1
我该如何解决这个问题?
您创建了一个一维数组,其中填充了其他一维数组。
#Include <Array.au3>
Local $_arr1=["name1","addr1","phone1"]
Local $_arr2=["name2","arr2","phone2"]
Local $_2dArray = [$_arr1 , $_arr2]
_ArrayDisplay($_2dArray[0])
_ArrayDisplay($_2dArray[1])
… an error occurs accessing the 2D array …
它将数组分配给另一个一维数组的元素,这些元素只能被隔离访问;喜欢:
$aArray = $_2dArray[0]
_ArrayDisplay($aArray)
或 _ArrayDisplay($_2dArray[0])
。但随后将其视为 2 dimensional array,因此出现 Array variable has incorrect number of subscripts or subscript dimension range exceeded.
-error.
How can I fix below AutoIt script to allow accessing elements of the newly generated 2D array?
根据Documentation - Keywords - ReDim
:
Resize an existing array.
示例:
#include <AutoItConstants.au3>; UBound() constants.
#include <Array.au3>; _ArrayDisplay()
Global Const $g_aArray1D_1 = ['name1', 'address1', 'phone1']
Global Const $g_aArray1D_2 = ['name2', 'address2', 'phone2']
Global $g_aArray2D = [['NAME', 'ADDRESS', 'PHONE'] ]
_ArrayAdd1DtoArray2D($g_aArray2D, $g_aArray1D_1)
_ArrayAdd1DtoArray2D($g_aArray2D, $g_aArray1D_2)
_ArrayDisplay($g_aArray2D)
Func _ArrayAdd1DtoArray2D(ByRef $aArray2D, Const $aArray1D)
Local Const $iRows = UBound($aArray2D, $UBOUND_ROWS)
Local Const $iCols = UBound($aArray2D, $UBOUND_COLUMNS)
; Resize array:
ReDim $aArray2D[$iRows + 1][$iCols]
For $i1 = 0 To $iCols - 1
; Add values of 1D array to new row of 2D array:
$aArray2D[$iRows][$i1] = $aArray1D[$i1]
Next
EndFunc
或使用_ArrayAdd()
(转换为字符串):
#include <Array.au3>; _ArrayToString() _ArrayAdd() _ArrayDisplay()
Global Const $g_aArray1D_1 = ['name1', 'address1', 'phone1']
Global Const $g_aArray1D_2 = ['name2', 'address2', 'phone2']
Global $g_aArray2D = [['NAME', 'ADDRESS', 'PHONE'] ]
_ArrayAdd($g_aArray2D, _ArrayToString($g_aArray1D_1))
_ArrayAdd($g_aArray2D, _ArrayToString($g_aArray1D_2))
_ArrayDisplay($g_aArray2D)
现在可以使用 $g_aArray2D[ x ][ x ]
访问值。