找回密码
 加入
搜索
查看: 4730|回复: 15

[效率算法] 求助帮忙优化代码[已解决]

 火.. [复制链接]
发表于 2016-9-6 15:07:28 | 显示全部楼层 |阅读模式
本帖最后由 fenhanxue 于 2016-9-6 21:54 编辑
#include <Inet.au3>
#Include <String.au3>
#include <Math.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <array.au3>
#include <GDIPlus.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>
#include <WinAPIEx.au3>
#include <Array.au3>

Global $array[4] = ['学号','姓名','年龄','成绩'];
    #cs 说明:
    数组   $array   的维度  及对应的文本 为自定义,    即我每次使用程序的时候,都有可能调整这些参数,并且我是不确定下次写的时候,会把这个数组的维度调整为多少,例如
               我可能会改成   $array[3] = ['aaa','saasd','ddd']
                         可能会改成   $array[8] = ['aaa','saasd','ddd','ddd','ddd','d6dd','ddd7','ddd8']
                         可能会改成   $array[2] = ['aaa','saasd']
                         。。。等等
    #ce

Global $check[UBound($array)]
$hGUI = GUICreate("测试", 1558, 511, 18, 158)
For $i = 1 To UBound($array)
    $check[$i-1] = GUICtrlCreateCheckbox($array[$i-1],20 + 50*$i,414,50,12)
Next
GUISetState()

While 1
    Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE
          ExitLoop
         
         Case $check[0]
                   a(0)
         Case $check[1]
                   a(1)         
         Case $check[2]
                   a(2)         
         Case $check[3]
                   a(3)

        EndSwitch
WEnd


Func a($x)
        ;.......  本部分代码略
EndFunc



求教图中红色框框2 的部分如何优化,
我想实现的功能是,每次我修改程序的时候,我只修改红色框框1 这里的参数,2这里就会有对应的功能,
我现在的代码,当我修改框框1的时候,必须把框框2的代码也跟着一起修改,即:
我现在的代码,每次我修改了$array,框框2部分的代码也必须跟着一起修改,当程序大了之后,感觉很冗余

;例如框框1改成
Global $array[2] = ['学号','姓名'];
;框框2必须跟着这样改
While 1
    Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE
          ExitLoop
         Case $check[0]
                   a(0)
         Case $check[1]
                   a(1)         
        EndSwitch
WEnd



;例如框框1改成
Global $array[3] = ['学号','姓名','aaa'];
;框框2必须跟着这样改
While 1
    Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE
          ExitLoop
         Case $check[0]
                   a(0)
         Case $check[1]
                   a(1)         
         Case $check[2]
                   a(2)         
        EndSwitch
WEnd


;又例如框框1改成
Global $array[6] = ['学号','姓名','aaa','11','22','333'];
;框框2必须跟着这样改
While 1
    Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE
          ExitLoop
         Case $check[0]
                   a(0)
         Case $check[1]
                   a(1)         
         Case $check[2]
                   a(2)         
         Case $check[3]
                   a(3)        
         Case $check[4]
                   a(4)        
         Case $check[5]
                   a(5)        
        EndSwitch
WEnd




这样的效率太低了,所以想请教,有没办法把2这个部分的代码优化一下,每次只改1不用改2,但2也能实现上述的功能。语文不好,希望各位能理解我想表达的意思。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2016-9-6 15:44:30 | 显示全部楼层
本帖最后由 afan 于 2016-9-6 16:01 编辑
Case $check[0] To $check[UBOund($check) - 1]
发表于 2016-9-6 15:52:46 | 显示全部楼层
经典就是经典,A大在回复我的帖子里提到过。
发表于 2016-9-6 15:54:40 | 显示全部楼层
本帖最后由 1361739590 于 2016-9-6 15:57 编辑

回复 12# ipmitool
參考afan的試試看。

;$check[0]對應 0
;$check[1]對應 1
;$check[n]對應 n
$msg = GUIGetMsg()
Switch $msg
        Case $GUI_EVENT_CLOSE
                ExitLoop
        Case $check[0] To $check[0]+UBOund($check) - 1
                a($msg-$check[0])
EndSwitch
发表于 2016-9-6 16:10:34 | 显示全部楼层
还是事件模式方便些
Opt('GUIOnEventMode', 1)
Global $array[4] = ['学号', '姓名', '年龄', '成绩'];
Global $check[UBound($array)]

$hGUI = GUICreate("测试", 300, 100)
For $i = 1 To UBound($array)
        $check[$i - 1] = GUICtrlCreateCheckbox($array[$i - 1], 50 * $i, 30, 50, 12)
        GUICtrlSetOnEvent(-1, 'GuiEnvent')
Next
GUISetState()

GUISetOnEvent(-3, 'GuiEnvent')

While 1
        Sleep(100)
WEnd

Func GuiEnvent()
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case $check[0] To $check[UBound($check) - 1]
                        a(@GUI_CtrlId - $check[0])
        EndSwitch
EndFunc   ;==>GuiEnvent

Func a($x)
        ConsoleWrite($x & @CRLF)
EndFunc   ;==>a
发表于 2016-9-6 16:24:42 | 显示全部楼层
还是事件模式方便些
haijie1223 发表于 2016-9-6 16:10



    -3另外写会更好...
Func GuiEnvent()
        a(@GUI_CtrlId - $check[0])
EndFunc   ;==>GuiEnvent
发表于 2016-9-6 16:33:57 | 显示全部楼层
回复 6# afan


    學習了
发表于 2016-9-6 16:34:09 | 显示全部楼层
回复 5# haijie1223


    學習了
发表于 2016-9-6 19:02:16 | 显示全部楼层
回复 6# afan


    请A版指点一下,我一直都是放在一个函数里面。
发表于 2016-9-6 19:11:40 | 显示全部楼层
回复 9# haijie1223


    GUISetOnEvent(-3, '_Exit')  _ _||
发表于 2016-9-6 19:21:21 | 显示全部楼层
回复 10# afan


    。。。afan理解错了,我是想问,为什么要把-3放到另外一个函数里面呢。
发表于 2016-9-6 20:28:47 | 显示全部楼层
回复 11# haijie1223


    不觉得便于组织代码提高效率么  专属函数无需条件判断了...
发表于 2016-9-6 20:49:54 | 显示全部楼层
回复 12# afan


    哦 明白了,多谢指点!
 楼主| 发表于 2016-9-6 21:52:38 | 显示全部楼层
学习良多!太感谢各位啦
发表于 2016-9-7 14:31:19 | 显示全部楼层
學習了

收藏了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-12 19:15 , Processed in 0.082635 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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