找回密码
 加入
搜索
查看: 9018|回复: 13

[效率算法] 怎样定义三维数组?【已解决】

 火.. [复制链接]
发表于 2013-1-6 22:00:57 | 显示全部楼层 |阅读模式
本帖最后由 blue_dvd 于 2013-1-7 17:05 编辑

怎样定义三维数组?
论坛搜到P大的方法
Local $aTotal[12] = [$aArray0, $aArray1, $aArray2, ..., ..., $aArray11]
$aArray_0 = $aTotal[0]
MsgBox(0, "", $aArray_0[0])
可惜运行编译出错!
哪位高手能有办法?主要用一个数组来管理不同的二维数组!
发表于 2013-1-6 22:30:39 | 显示全部楼层
定义一个一维数组,把每个数组项塞一个二维数组进去就行了
 楼主| 发表于 2013-1-6 23:26:07 | 显示全部楼层
回复 2# kevinch
能给个例子吗?
发表于 2013-1-6 23:28:28 | 显示全部楼层
回复 3# blue_dvd


   
#include'ARRAY.AU3'
Local $M[2][2]=[['1','2'],['A','B']],$N[2][2]=[['3','4'],['X','Y']]
Local $A[2]=[$M,$N]
_ArrayDisplay($A[1])
 楼主| 发表于 2013-1-6 23:57:39 | 显示全部楼层
本帖最后由 blue_dvd 于 2013-1-6 23:58 编辑

回复 4# annybaby
能否这样
$arr1=二维数组
$arr2=二维数组
$arr3=二维数组
写成
for $i=1 to 3
      $arr&$i=二维数组
next
就是不一个个写,用循环的方法写
  可惜$arr&$i总是错!
有好的方法吗?
先谢了!
发表于 2013-1-7 00:03:48 | 显示全部楼层
回复 5# blue_dvd

贴可以F5的码`~
出错不要紧~
发表于 2013-1-7 01:07:52 | 显示全部楼层
#include <array.au3>

Dim $arr[5]
For $n=0 To UBound($arr)-1
        $r=Random(3,9,1)
        $c=Random(3,9,1)
        Dim $arr2[$r][$c]
        For $i=0 To UBound($arr2)-1
                For $t=0 To UBound($arr2,2)-1
                        $arr2[$i][$t]=Random(1,9,1)
                Next
        Next
        $arr[$n]=$arr2
Next
For $n=0 To UBound($arr)-1
        _ArrayDisplay($arr[$n])
Next
这个例子够生动了吧
发表于 2013-1-7 02:54:28 | 显示全部楼层
三维数组貌似用excel比较合适
发表于 2013-1-7 03:06:05 | 显示全部楼层
回复 1# blue_dvd

你想把数组放在另一个数组里面做为一个元素(象C语言里那样)?若是这个意思,au3里没有直接的方法干这事的,因为au3并没有给变量单独的地址空间。但可以间接地通过一个变量来得到嵌入数组的入口,这样做虽然可以,但会使得code非常地不可读性,特别在传递这个数组时,非常容易搞错。

Local $arr[3]
Local $a1[3] = [2, "a1-1","a1-2"]
Local $a2[3] = [2, "a2-1","a2-2"]
$arr[1] = $a1
$arr[2] = $a2
$arr[0] = 2
Local $dumy
 
For $i = 1 to $arr[0]
    $dumy = $arr[$i]
    If IsArray($dumy) Then
        For $j = 1 to $dumy[0]
            ConsoleWrite("$i:=" & $i & ", $dumy[" & $j & "]:=" & $dumy[$j] & @LF)
        Next
    Else
        ConsoleWrite("!>Oops!, What happened? Expected an array!" & @LF)
    EndIf
Next



若不是上面意思,那就直接定义个三维数组就可以了,有什么问题呢?

Global $aArray[3][4][2] = [[["000", "001"], ["010", "011"], ["020", "021"], ["030", "031"]], _
                           [["100", "101"], ["110", "111"], ["120", "121"], ["130", "131"]], _
                           [["200", "201"], ["210", "211"], ["220", "221"], ["230", "231"]]]

ConsoleWrite($aArray[2][1][0] & @CRLF)
发表于 2013-1-7 09:30:53 | 显示全部楼层
直接定义三维数组即可
Global $aArray[1][1][1]


不过数组维度并非越多越好,数组定义出来要操作,多维数组缺少封装好的自定义操作函数,自己封装也麻烦
能用一维尽量不要用二维,勉强能用二维解决就不要往更多的维度思考了……
 楼主| 发表于 2013-1-7 11:43:21 | 显示全部楼层
本帖最后由 blue_dvd 于 2013-1-7 11:45 编辑

终于搞定了
$oexcel=ObjCreate("excel.application")
    $oexcel.visible=False 
    $wb=$oexcel.workbooks.open($sFilePath1)  
    
        Local $iTemp = $wb.Sheets.Count
    Local $iarr[$iTemp ]
        
        For $i=1 To $iTemp
          $arr=$wb.worksheets($i).usedrange.value  
          $iarr[ $i-1]= Array2DColsToRows($arr)
          Next
        
        For $i=1 To $iTemp 
                _ArrayDisplay($iarr[$i-1])
        Next
        
        $wb.close(true) 
    $oexcel.quit  
 楼主| 发表于 2013-1-7 11:48:00 | 显示全部楼层
思路是:把Excel中的工作表(二维数组)读取后,用一维数组管理!
感谢kevinch ,happytc 提供思路代码帮助!
发表于 2013-9-4 04:25:36 | 显示全部楼层
回复 4# annybaby
你的是二维数据吧
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-10 05:24 , Processed in 0.080996 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表