请问二维数组如何只删除一整列,_ArrayDelete好像实现不了【已解决】
本帖最后由 freedayfzc 于 2010-10-8 00:17 编辑请问二维数组如何只删除列,_ArrayDelete好像实现不了,这个函数只能会一整行删除。 回复 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
回复 2# C.L
精彩!
C.L兄可发到UDF区。 回复 2# C.L
不知是否将
If $iElement < 0 Then $iElement = 0
改为判断为负值时从右边开始删,如 -1 删除最后的 Col,-2 为删除倒数第2个Col,感觉这样更方便点… UDF 见相约UDF 本帖最后由 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:36 编辑
回复 3# 3mile
只是一个函数,没必要发到UDF区吧?呵呵~
刚想到,以前还写过两个二维数组转换成字符串或二进制数据和还原的函数,有空整合一下,倒是可以发一个UDF #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') 多谢CL等各位的帮助,马上来研究这个udf函数 能提供删除数组行的函数
页:
[1]