freedayfzc 发表于 2010-10-7 03:20:22

请问二维数组如何只删除一整列,_ArrayDelete好像实现不了【已解决】

本帖最后由 freedayfzc 于 2010-10-8 00:17 编辑

请问二维数组如何只删除列,_ArrayDelete好像实现不了,这个函数只能会一整行删除。

C.L 发表于 2010-10-7 12:10:25

回复 1# freedayfzc

给你写一个删除数组列的函数
代码:


#include <array.au3>

Dim $a = [,]

_ArrayDeleteCol ($a,1)
_ArrayDisplay ($a)


Func _ArrayDeleteCol(ByRef $avArray, $iElement)
        If Not IsArray($avArray) Then Return SetError(1, 0, 0)

        Local $iUBound = UBound($avArray, 1) - 1
        Local $iUBound2 = UBound($avArray, 2) -1
        If Not $iUBound Then
                $avArray = ""
                Return 0
        EndIf

        If $iElement < 0 Then $iElement = 0
        If $iElement > $iUBound2 Then $iElement = $iUBound2

        Switch UBound($avArray, 0)
                Case 1
                        $avArray = ''
                Case 2
                        For $i = 0 To $iUBound
                                For $j = $iElement To $iUBound2 -1
                                        $avArray[$i][$j] = $avArray[$i][$j+1]
                                Next
                        Next
                        ReDim $avArray[$iUBound+1][$iUBound2]
                Case Else
                        Return SetError(3, 0, 0)
        EndSwitch

        Return $iUBound
EndFunc   ;==>_ArrayDeleteCol

3mile 发表于 2010-10-7 12:52:31

回复 2# C.L
精彩!
C.L兄可发到UDF区。

afan 发表于 2010-10-7 15:57:37

回复 2# C.L

不知是否将
If $iElement < 0 Then $iElement = 0
改为判断为负值时从右边开始删,如 -1 删除最后的 Col,-2 为删除倒数第2个Col,感觉这样更方便点…

yarsye 发表于 2010-10-7 17:05:29

UDF 见相约UDF

C.L 发表于 2010-10-7 17:10:40

本帖最后由 C.L 于 2010-10-7 17:17 编辑

回复 4# afan

OK,这个容易解决,只要稍稍改动一下代码


#include <array.au3>

Dim $a = [,]

_ArrayDeleteCol ($a,-5)
_ArrayDisplay ($a)


Func _ArrayDeleteCol(ByRef $avArray, $iElement)
        If Not IsArray($avArray) Then Return SetError(1, 0, 0)

        Local $iUBound = UBound($avArray, 1) - 1
        Local $iUBound2 = UBound($avArray, 2) -1
        If Not $iUBound Then
                $avArray = ""
                Return 0
        EndIf

        If $iElement < 0 Then
                $iElement = $iUBound2 + $iElement + 1
                If $iElement < 0 Then $iElement = 0
        EndIf
        If $iElement > $iUBound2 Then $iElement = $iUBound2

        Switch UBound($avArray, 0)
                Case 1
                        $avArray = ''
                Case 2
                        For $i = 0 To $iUBound
                                For $j = $iElement To $iUBound2 -1
                                        $avArray[$i][$j] = $avArray[$i][$j+1]
                                Next
                        Next
                        ReDim $avArray[$iUBound+1][$iUBound2]
                Case Else
                        Return SetError(3, 0, 0)
        EndSwitch

        Return $iUBound
EndFunc   ;==>_ArrayDeleteCol

C.L 发表于 2010-10-7 17:19:47

本帖最后由 C.L 于 2010-10-7 17:36 编辑

回复 3# 3mile

只是一个函数,没必要发到UDF区吧?呵呵~

刚想到,以前还写过两个二维数组转换成字符串或二进制数据和还原的函数,有空整合一下,倒是可以发一个UDF

netegg 发表于 2010-10-7 18:10:20

#include <Array.au3>
Global $2dArray = [['1', 'a'], ['2', 'b'], ['3', 'c'],['4', 'e']]
_ArrayDisplay($2dArray)
Global $1DArrayFirst, $1DArraySecond

For $i = 0 To UBound($2dArray) -1
    $1DArrayFirst[$i] = $2dArray[$i]
    $1DArraySecond[$i] = $2dArray[$i]
Next
_ArrayDisplay($1DArrayFirst, '$1DArrayFirst')
_ArrayDisplay($1DArraySecond, '$1DArraySecond')

freedayfzc 发表于 2010-10-7 23:56:33

多谢CL等各位的帮助,马上来研究这个udf函数

zxxputian2 发表于 2018-5-31 09:53:09

能提供删除数组行的函数
页: [1]
查看完整版本: 请问二维数组如何只删除一整列,_ArrayDelete好像实现不了【已解决】