【问题标题】:Add 1D array to existing 2D array将一维数组添加到现有的二维数组
【发布时间】:2018-07-22 09:10:53
【问题描述】:

我想合并一维数组。如何在 AutoIt 脚本下方更改以将元素作为新生成的 2D 数组访问?测试脚本是:

#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

我该如何解决这个问题?

【问题讨论】:

    标签: arrays merge 2d element autoit


    【解决方案1】:

    您制作了一个用其他一维数组填充的一维数组。

    #Include <Array.au3>
    
    Local $_arr1=["name1","addr1","phone1"]
    Local $_arr2=["name2","arr2","phone2"]
    Local $_2dArray = [$_arr1 , $_arr2]
    
    _ArrayDisplay($_2dArray[0])
    _ArrayDisplay($_2dArray[1])
    

    【讨论】:

      【解决方案2】:

      …访问二维数组时出错…

      它将数组分配给另一个一维数组的元素,这些元素只能被隔离访问;喜欢:

      $aArray = $_2dArray[0]
      _ArrayDisplay($aArray)
      

      或者只是_ArrayDisplay($_2dArray[0])。但随后将其视为2 dimensional array,因此出现Array variable has incorrect number of subscripts or subscript dimension range exceeded. -error。

      如何在 AutoIt 脚本下方修复以允许访问新生成的二维数组的元素?

      根据Documentation - Keywords - ReDim

      调整现有数组的大小。

      例子:

      #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 ] 访问值。

      【讨论】:

        猜你喜欢
        • 2019-07-23
        • 1970-01-01
        • 1970-01-01
        • 2012-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-22
        • 1970-01-01
        相关资源
        最近更新 更多