将1D阵列添加到现有2D阵列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将1D阵列添加到现有2D阵列相关的知识,希望对你有一定的参考价值。

我想合并1D数组。如何更改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

但访问2D阵列时出错:

ConsoleWrite($_2darray[0][0])
ConsoleWrite(^ ERROR
Exit code: 1    Time: 239.1

我怎样才能解决这个问题?

答案

...访问2D阵列时出错...

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

$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脚本下面修复以允许访问新生成的2D数组的元素?

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

另一答案

你制作了一个充满其他1D阵列的1D阵列。

#Include <Array.au3>

Local $_arr1=["name1","addr1","phone1"]
Local $_arr2=["name2","arr2","phone2"]
Local $_2dArray = [$_arr1 , $_arr2]

_ArrayDisplay($_2dArray[0])
_ArrayDisplay($_2dArray[1])

以上是关于将1D阵列添加到现有2D阵列的主要内容,如果未能解决你的问题,请参考以下文章

vbscript 将ADO Recordset复制到2D阵列

将 2D 纹理阵列的单层从 GPU 复制到 CPU

3D 阵列(1D 平面)索引

当期望1d阵列时,传递列向量y

将蒙版阵列 2d 应用到 3d

python 使用恒定空间,将2d阵列向右旋转90度