blue_dvd 发表于 2012-11-24 23:46:27

关于_ArrayAdd()与_ArrayAdd2()的讨论

本帖最后由 blue_dvd 于 2012-11-24 23:52 编辑

在_ArrayAdd()中
变为#include <Array.au3>
Local $avArray
_ArrayAdd($avArray, "Brian")
_ArrayDelete($avArray, 0)
_ArrayDisplay($avArray, "$avArray 添加后的数据 _ArrayAdd()")发现添加数据中第1个数组是空的
如果$avArray改为$avArray程序出错
所以加了一句_ArrayDelete($avArray, 0)删掉第一个空数据;

在_ArrayAdd2()中
出处:http://www.autoitx.com/forum.php?mod=viewthread&tid=17061&fromuid=7639113#Include <Array.au3>
Dim $avArray=
Dim $anArray=["Acd","BBB","DEFAS","dior","fdsa","e32390","32"]
Dim $Grid;这里改为Dim $Grid时,只添加了一个数字
_ArrayAdd2($Grid,$avArray);将一维数组添加到二维数组中
_ArrayAdd2($Grid,$anArray);将一维数组添加到二维数组中
_ArrayDisplay($Grid)
问题1:能否去掉第一行的空数据;
问题2:在没有定有多少列的情况下,即Dim $Grid时,也可以照常添加$avArray的6个数据或是$anArray里的7个数据?

annybaby 发表于 2012-11-25 09:56:07

回复 1# blue_dvd

1.第一行当然是空的,因为你定义时就没有赋值~~
#include <Array.au3>
Local $avArray=['定义我时,麻烦您赋个初值,谢谢~~']
_ArrayAdd($avArray, "Brian")
_ArrayDisplay($avArray, "$avArray 添加后的数据 _ArrayAdd()")
   
第二个例子,空行也是同样的道理~~

2.用redim和UBound

#Include <Array.au3>
Dim $avArray=
Dim $anArray=["Acd","BBB","DEFAS","dior","fdsa","e32390","32"]
Dim $Grid=[['和第一个例子一样,不多说了~~']];这里改为Dim $Grid时,只添加了一个数字
ReDim $Grid[(UBound($anArray)-1)]
_ArrayAdd2($Grid,$avArray);将一维数组添加到二维数组中
_ArrayAdd2($Grid,$anArray);将一维数组添加到二维数组中
_ArrayDisplay($Grid)

Func _ArrayAdd2(ByRef $array1,$array2);_ReArrayAdd(目标数组,增加内容)
        If IsArray($array2) Then
                If UBound($Array2, 0) <> 1 Then Return SetError(2, 0, -1);增加内容不是一个一维数组
        Else
                Return SetError(1, 0, -1);返回错误代码1,增加的内容非数组
        EndIf
        If Not IsArray($array1) Then Return SetError(3, 0, -1);返回错误代码3,目标数组非数组
        $One_Dimen=UBound($array2);取一维数组数量
        $Many_Dimen=UBound($array1,0);取二维数组维数
        Local $Many_Dimen_Line=UBound($array1,1);取二维数组行数
        $Many_Dimen_Col=UBound($array1,2);取二维数组列数
        If $Many_Dimen<>2 Then Return SetError(4,0,-1);返回错误代码4,目标数组非二维数组
        If $One_Dimen<$Many_Dimen_Col Or $One_Dimen>$Many_Dimen_Col Then
                ReDim $array2[$Many_Dimen_Col]
        EndIf
        ReDim $array1[$Many_Dimen_Line+1][$Many_Dimen_Col]
        For $add_i=0 To $Many_Dimen_Col-1
      $array1[$Many_Dimen_Line][$add_i]=$array2[$add_i]               
        Next
        Return $Many_Dimen_Line
       
EndFunc

blue_dvd 发表于 2012-11-25 13:23:18

回复 2# annybaby
感谢回复!
我的思维是:我只是定义数组不给它初始值,直接由合并的数据来赋值!
你给的代码中还是没能去掉第一行的空行!

netegg 发表于 2012-11-25 14:33:57

http://www.autoitx.com/thread-28506-1-3.html

netegg 发表于 2012-11-25 14:34:02

http://www.autoitx.com/thread-28506-1-3.html

annybaby 发表于 2012-11-25 14:44:31

回复 3# blue_dvd

你定义了空的,又不给它赋值,又使用_arrayadd添加,当然有空!!!!!!

netegg 发表于 2012-11-25 16:20:15

本帖最后由 netegg 于 2012-11-25 16:24 编辑

回复 6# annybaby
不是这个缘故,第一个元素不能普通意义上的赋值
这么理解吧,如果定义一个数组,$a不能等于0,必须从1开始,第0个元素首先是数组元素

annybaby 发表于 2012-11-25 18:24:01

回复 7# netegg


    试举例说明??

netegg 发表于 2012-11-25 20:31:36

本帖最后由 netegg 于 2012-11-25 20:46 编辑

回复 8# annybaby
;Dim $a = 0
;ConsoleWrite($a)
Dim $aA
$aA = 1
ConsoleWrite($aA)
其实这个问题可以换个角度理解,ubound()可以返回元素个数,如果是数组的话,最少为1
未注释的部分之所以可以成功,就是要先定义数组,才能有,没数组的话肯定报错
还有,楼主那个问题,和这些关系似乎不大,_arrayadd2d那个函数本来就不是向空的二维数组里加行的

blue_dvd 发表于 2012-11-25 20:45:32

回复 6# annybaby
我的意思是添加完后,有什么办法删掉第一行空行?

netegg 发表于 2012-11-25 20:49:25

本帖最后由 netegg 于 2012-11-25 20:50 编辑

回复 10# blue_dvd
上面不是给你链接了吗Func _Array2DDeleteRow(ByRef $avArray, $line)
      Local $avArray2
      For $i = 0 To UBound($avArray, 1) - 1
                If $i < $line Then
                        For $j = 0 To UBound($avArray, 2) - 1
                              $avArray2[$i][$j] = $avArray[$i][$j]
                        Next
                Else
                        If $i > $line Then
                              For $j = 0 To UBound($avArray, 2) - 1
                                        $avArray2[$i - 1][$j] = $avArray[$i][$j]
                              Next
                        EndIf
                EndIf
       Next
      Return $avArray2
EndFunc   ;==>_Array2DDeleteRow

annybaby 发表于 2012-11-25 20:57:21

回复 9# netegg

呵呵,你说的当然很明显是事实,我也知道,不过我看不到这个例子和我前面(2L和6L)所描述的有任何冲突的地方~~

我这两楼都是解释为什么会出现一个空的行~~
并没有说可以不定义数组就直接给一个空想的数组元素赋值哦~~

blue_dvd 发表于 2012-11-25 20:59:57

本帖最后由 blue_dvd 于 2012-11-25 21:01 编辑

回复 4# netegg
用了老大蛋你的删除行函数_Array2DDeleteRow(ByRef $avArray, $line)
,无效果!一行也删不掉!#Include <Array.au3>
Dim $avArray=
Dim $anArray=["Acd","BBB","DEFAS","dior","fdsa","e32390","32"]
Dim $Grid=[['和第一个例子一样,不多说了~~']];这里改为Dim $Grid时,只添加了一个数字
ReDim $Grid[(UBound($anArray)-1)]

_ArrayAdd2($Grid,$avArray);将一维数组添加到二维数组中
_ArrayAdd2($Grid,$anArray);将一维数组添加到二维数组中
_Array2DDeleteRow($Grid,0);删除第一行
_ArrayDisplay($Grid)

Func _ArrayAdd2(ByRef $array1,$array2);_ReArrayAdd(目标数组,增加内容)
      If IsArray($array2) Then
                If UBound($Array2, 0) <> 1 Then Return SetError(2, 0, -1);增加内容不是一个一维数组
      Else
                Return SetError(1, 0, -1);返回错误代码1,增加的内容非数组
      EndIf
      If Not IsArray($array1) Then Return SetError(3, 0, -1);返回错误代码3,目标数组非数组
      $One_Dimen=UBound($array2);取一维数组数量
      $Many_Dimen=UBound($array1,0);取二维数组维数
      Local $Many_Dimen_Line=UBound($array1,1);取二维数组行数
      $Many_Dimen_Col=UBound($array1,2);取二维数组列数
      If $Many_Dimen<>2 Then Return SetError(4,0,-1);返回错误代码4,目标数组非二维数组
      If $One_Dimen<$Many_Dimen_Col Or $One_Dimen>$Many_Dimen_Col Then
                ReDim $array2[$Many_Dimen_Col]
      EndIf
      ReDim $array1[$Many_Dimen_Line+1][$Many_Dimen_Col]
      For $add_i=0 To $Many_Dimen_Col-1
      $array1[$Many_Dimen_Line][$add_i]=$array2[$add_i]               
      Next
      Return $Many_Dimen_Line
      
EndFunc

Func _Array2DDeleteRow(ByRef $avArray, $line)
      Local $avArray2
      For $i = 0 To UBound($avArray, 1) - 1
                If $i < $line Then
                        For $j = 0 To UBound($avArray, 2) - 1
                              $avArray2[$i][$j] = $avArray[$i][$j]
                        Next
                Else
                        If $i > $line Then
                              For $j = 0 To UBound($avArray, 2) - 1
                                        $avArray2[$i - 1][$j] = $avArray[$i][$j]
                              Next
                        EndIf
                EndIf
      Next
      Return $avArray2
EndFunc   ;==>_Array2DDeleteRow

blue_dvd 发表于 2012-11-25 21:03:00

会不会是我自己的问题,你们试试!我上面的代码

netegg 发表于 2012-11-25 21:08:44

本帖最后由 netegg 于 2012-11-25 21:10 编辑

#include <Array.au3>
Dim $avArray =
Dim $anArray = ["Acd", "BBB", "DEFAS", "dior", "fdsa", "e32390", "32"]
Dim $Grid ;这里改为Dim $Grid时,只添加了一个数字
_ArrayAdd2($Grid, $avArray);将一维数组添加到二维数组中
_ArrayAdd2($Grid, $anArray);将一维数组添加到二维数组中
_ArrayDisplay($Grid)
$Grid = _Array2DDeleteRow($Grid, 0)
_ArrayDisplay($Grid, '_Array2DDeleteRow')
Func _ArrayAdd2(ByRef $array1, $array2);_ReArrayAdd(目标数组,增加内容)
        If IsArray($array2) Then
                If UBound($array2, 0) <> 1 Then Return SetError(2, 0, -1);增加内容不是一个一维数组
        Else
                Return SetError(1, 0, -1);返回错误代码1,增加的内容非数组
        EndIf
        If Not IsArray($array1) Then Return SetError(3, 0, -1);返回错误代码3,目标数组非数组
        $One_Dimen = UBound($array2);取一维数组数量
        $Many_Dimen = UBound($array1, 0);取二维数组维数
        Local $Many_Dimen_Line = UBound($array1, 1);取二维数组行数
        $Many_Dimen_Col = UBound($array1, 2);取二维数组列数
        If $Many_Dimen <> 2 Then Return SetError(4, 0, -1);返回错误代码4,目标数组非二维数组
        If $One_Dimen < $Many_Dimen_Col Or $One_Dimen > $Many_Dimen_Col Then
                ReDim $array2[$Many_Dimen_Col]
        EndIf
        ReDim $array1[$Many_Dimen_Line + 1][$Many_Dimen_Col]
        For $add_i = 0 To $Many_Dimen_Col - 1
                $array1[$Many_Dimen_Line][$add_i] = $array2[$add_i]
        Next
        Return $Many_Dimen_Line
       
EndFunc   ;==>_ArrayAdd2
Func _Array2DDeleteRow(ByRef $avArray, $line)
        Local $avArray2
        For $i = 0 To UBound($avArray, 1) - 1
                If $i < $line Then
                        For $j = 0 To UBound($avArray, 2) - 1
                                $avArray2[$i][$j] = $avArray[$i][$j]
                        Next
                Else
                        If $i > $line Then
                                For $j = 0 To UBound($avArray, 2) - 1
                                        $avArray2[$i - 1][$j] = $avArray[$i][$j]
                                Next
                        EndIf
                EndIf
        Next
        Return $avArray2
EndFunc   ;==>_Array2DDeleteRow
我去,睁眼说瞎话{:face (207):}
页: [1] 2
查看完整版本: 关于_ArrayAdd()与_ArrayAdd2()的讨论