找回密码
 加入
搜索
查看: 18488|回复: 22

[系统综合] 复杂的二维数组怎么转化成一维数组

 火.. [复制链接]
发表于 2012-10-16 19:23:08 | 显示全部楼层 |阅读模式
c语言中多维数组a[3][5]=[[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]],要取出这个数组中第一维的数据可以表示成a[1]=[1,2,3,4,5],a[2]=[2,3,4,5,6]
那么autoit中怎么表示,以下是本人写的一个函数,是个二维数组,要取出第一维的数据怎么表示呢?请指教。
Func sange($m)
        Local $i1,$i2,$i3,$num1,$num2,$num3,$k=0
        For $i1 = 0 To $m Step 1
                                $num1 = $haomay[$i1]
                                For $i2 = 1 To $m Step 1
                                        If $i2 > $i1 Then
                                        $num2 = $haomay[$i2]
                                        For $i3 = 2 To $m Step 1
                                                If $i3 > $i2 Then
                                                        $num3 = $haomay[$i3]
                                                    ReDim $array[$k+1][3]
                                                $array[$k][0]=$num1
                                                    $array[$k][1]=$num2
                                                        $array[$k][2]=$num3
                                                    $k=$k+1
                                            EndIf
                                        Next  
                                        EndIf
                                Next
        Next                       
        Return $array       
EndFunc
发表于 2012-10-16 19:35:43 | 显示全部楼层
 楼主| 发表于 2012-10-16 20:01:21 | 显示全部楼层
回复 2# netegg


    里面没有啊,讲的简单一点就是,a[$k][3] ,$k变量可能很大,现在要把第一维里面的元素放在另外一个一维数组里面,即b[3].但是$k是个很大的变量,如果是100,那就要定义100($k)个一维数组,这个很麻烦,有没有什么方法,类似于c语言a[$k],a[1],a[2]……
发表于 2012-10-16 20:08:44 | 显示全部楼层
本帖最后由 netegg 于 2012-10-16 20:09 编辑

回复 3# sanye000001
怎么没有,不就是取行吗
_Array2DGetRow
 楼主| 发表于 2012-10-16 20:12:46 | 显示全部楼层
回复 4# netegg


    问题不是那么简单的,取行方法就多了,关键是取行之后,有很多数据要进行整合。
发表于 2012-10-16 20:15:56 | 显示全部楼层
本帖最后由 netegg 于 2012-10-16 20:17 编辑

回复 5# sanye000001
我只看标题和描述回答问题
 楼主| 发表于 2012-10-16 20:18:04 | 显示全部楼层
回复 6# netegg


    哦,那麻烦你再看看,这个问题困扰着我
发表于 2012-10-16 20:29:36 | 显示全部楼层
本帖最后由 netegg 于 2012-10-16 20:32 编辑

[au3]#include<array.au3>
Local $aA[3][5]=[[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]]
For $i = 0 To UBound($aA, 1)-1
  $aB = _array2dgetrow($aA, $i)
  _ArrayDisplay($aB)
next
Func _Array2DGetRow(ByRef $avArray, $row)
        Local $rowstring = ''
        For $j = 0 To UBound($avArray, 2) - 1
                If $avArray[$row][$j] Then $rowstring &= '|' & $avArray[$row][$j]
        Next
        Return StringSplit(StringTrimLeft($rowstring, 1), '|', 2)
EndFunc   ;==>_Array2DGetRow[/au3]
要整合的话,根据具体情况再弄
 楼主| 发表于 2012-10-16 20:43:21 | 显示全部楼层
回复 8# netegg
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <array.au3>
Global Const $haoma[33] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33]
Dim $haomax[33],$haomay[1],$array[1][3] ;$haomax[33]定义复选框
Local $i, $a = 50, $b = 80, $j,$x1,$x2,$y1,$y2,$suoyin,$z ;$a\$b表示界面上的距离 $i\$j定义复选框文本以及字体大小,$x/$x1\y1\y2表示输入的组数的值,$suoyin表示被选择的数组最后一个数值的下标,$z无意义
$anzhuang = GUICreate("彩票幸运分 QQ:1375030119", 800, 600)

Func duqu()                                       ;读取被选择的元素$haomay
        Dim $haomay[1]
        Local $xx,$yy=0
        For $xx=0 To 32 Step 1
                If GUICtrlRead($haomax[$xx]) == $gui_checked Then
                                        ReDim $haomay[$yy+1]
                                        $haomay[$yy] = GUICtrlRead($haomax[$xx], 1)
                                        $yy = $yy + 1
                EndIf
        Next
        Return $haomay
EndFunc
Func sange($m)
        Local $i1,$i2,$i3,$num1,$num2,$num3,$k=0
        For $i1 = 0 To $m Step 1
                                $num1 = $haomay[$i1]
                                For $i2 = 1 To $m Step 1
                                        If $i2 > $i1 Then
                                        $num2 = $haomay[$i2]
                                        For $i3 = 2 To $m Step 1
                                                If $i3 > $i2 Then
                                                        $num3 = $haomay[$i3]
                                                    ReDim $array[$k+1][3]
                                                $array[$k][0]=$num1
                                                    $array[$k][1]=$num2
                                                        $array[$k][2]=$num3
                                                    $k=$k+1
                                            EndIf
                                        Next  
                                        EndIf
                                Next
        Next                        
        Return $array        
EndFunc
Func _Array2DGetRow(ByRef $avArray, $row)


        Local $rowstring = ''


        For $j = 0 To UBound($avArray, 2) - 1


                If $avArray[$row][$j] Then $rowstring &= '|' & $avArray[$row][$j]


        Next


        Return StringSplit(StringTrimLeft($rowstring, 1), '|', 2)

EndFunc   ;==>_Array2DGetRow

$label1 = GUICtrlCreateLabel("请选择你需要的号码:", 50, 10, 200, 50)
GUICtrlSetFont($label1, 15)
GUICtrlSetColor($label1, 0xff0000)
For $i = 0 To 32 Step 1
        $haomax[$i] = GUICtrlCreateCheckbox($i + 1, $a, $b, 50, 30)
        $a = $a + 65
        If $a > 700 Then
                $a = 50
                $b = $b + 100
        EndIf
Next
For $j = 0 To 32 Step 1
        GUICtrlSetFont($haomax[$j], 12)
Next
$label2=GUICtrlCreateLabel("输入组数",50,360,50,30)
$y1=GUICtrlCreateInput($x1,110,350,80,30)
$label3=GUICtrlCreateLabel("输入分数", 600, 360, 50, 30)
$y2=GUICtrlCreateInput($x2, 650, 350, 80, 30)
$quxiao = GUICtrlCreateButton("重新选择", 50, 540, 100, 50)
$kaishi = GUICtrlCreateButton("开始", 650, 540, 100, 50)
GUISetState(@SW_SHOW, $anzhuang)
While 1
        $msg = GUIGetMsg()
        If $msg = $gui_event_close Then
                ExitLoop
        EndIf        
        Select 
                Case $msg=$kaishi
                        $haomay=duqu()
                        $jieguo=sange(UBound($haomay)-1)  ;得到二维数组的结果$jieguo[$k][3]
                        _Array2DGetRow($jieguo,UBound($jieguo))
        EndSelect
WEnd
GUIDelete($anzhuang)
麻烦你看一下这段代码
发表于 2012-10-16 20:46:38 | 显示全部楼层
看不太懂了
发表于 2012-10-16 20:46:44 | 显示全部楼层
看不太懂了
 楼主| 发表于 2012-10-16 20:47:05 | 显示全部楼层
我要得到$k转化后的所有一维数组,当然可以写一个for语句,不过怎么定义一维数组呢?难道要手动定义$k个一维数组?
 楼主| 发表于 2012-10-16 20:49:15 | 显示全部楼层
回复 11# netegg


    你复制代码运行一下就明白了
发表于 2012-10-16 20:54:04 | 显示全部楼层
不对了,你想怎么定义一维数组
 楼主| 发表于 2012-10-16 23:36:06 | 显示全部楼层
回复 14# netegg


    我要把所有的二维数组分解成一维数组,并且所有的一维数组赋给定义的变量数组。这样就生成$k个的一维数组,方便组合。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-22 01:49 , Processed in 0.081329 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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