找回密码
 加入
搜索
查看: 2296|回复: 4

[AU3基础] 麻烦高人给这个代码加注释,看不到的说

  [复制链接]
发表于 2010-10-20 01:30:17 | 显示全部楼层 |阅读模式
#include <Array.au3>
Local $aArray[10] = ["a", "b", "c", "d", "e", "f", "a", "b", "c", "d"], $sVar
Local $sRandomSep = Random(1, 1000) & Random(2000, 3000) & Random(4000, 5000)

For $i = 0 To Ubound($aArray) - 1
        If Not IsDeclared(".." & $aArray[$i]) Then
                Assign(".." & $aArray[$i], $i)
        Else
                Assign("??" & $i, 0)
                If Not IsDeclared("??" & Eval(".." & $aArray[$i])) Then
                        Assign("??" & Eval(".." & $aArray[$i]), 0)
                EndIf
        EndIf
Next
For $i = 0 To Ubound($aArray) - 1
        If Not IsDeclared("??" & $i) Then ContinueLoop
        $sVar &= $aArray[$i] & $sRandomSep
Next
$sVar = StringRegExp($sVar, "(?U)(.*)" & $sRandomSep, 3)
_Arraydisplay($sVar)
发表于 2010-10-20 01:40:15 | 显示全部楼层
这是超人写的,估计高人也看不懂
发表于 2010-10-20 07:20:22 | 显示全部楼层
哦。也~!吃大排,便超人~
发表于 2010-10-20 10:11:30 | 显示全部楼层
本帖最后由 lanfengc 于 2010-10-20 10:20 编辑

注释如下。 如有不对的地方,请指正。 让我也学习下。
#include <Array.au3>
Local $aArray[10] = ["a", "b", "c", "d", "e", "f", "a", "b", "c", "d"], $sVar
Local $sRandomSep = Random(1, 1000) & Random(2000, 3000) & Random(4000, 5000)

For $i = 0 To Ubound($aArray) - 1    ;这个循环的意思是,将数组中的所有元素定义成一个变量。
        If Not IsDeclared(".." & $aArray[$i]) Then ;如果变量.. $aArray[$i]没有定义,
                Assign(".." & $aArray[$i], $i)  ;那么将它定义并赋值为$i
        Else  ;如果定义了
                Assign("??" & $i, 0)  ;那么就定义循环变量为一个??$i的变量,赋值为0.
                If Not IsDeclared("??" & Eval(".." & $aArray[$i])) Then ;如果变量??(.. $aArray[$i])没有定义,
                        Assign("??" & Eval(".." & $aArray[$i]), 0)  ;那么将量??(.. $aArray[$i])赋值为0.
                EndIf
        EndIf
Next

For $i = 0 To Ubound($aArray) - 1;这个循环的功能是从数组中找出出现了多次的。
        If Not IsDeclared("??" & $i) Then ContinueLoop  ;如果没有定义??$i的变量,那么终止本次循环。
        $sVar &= $aArray[$i] & $sRandomSep  ;如果定义了则将数组中的该元素组合随机数,存入变量。
Next
$sVar = StringRegExp($sVar, "(?U)(.*)" & $sRandomSep, 3)  ;从$sVar中提取字符。
_Arraydisplay($sVar)

;程序流程如下:
;第一次循环  ..a 没有定义,那么定义..a为 0
;第二次循环  ..b 没有定义, 那么定义..b为1
;第三次循环  ..c 没有定义, 那么定义..c为2
;第四次循环  ..d 没有定义, 那么定义..d为3
;第五次循环  ..e 没有定义, 那么定义..e为4
;第六次循环  ..f 没有定义,那么定义..f为5
;第七次循环  ..a 已经定义, 定义??6为0 ??0为0
;第八次循环  ..b 已经定义, 定义??7为0 ??1为0
;第九次循环  ..c 已经定义, 定义??8为0 ??2为0
;第十次循环  ..d 已经定义, 定义??9为0 ??3为0

;下面的循环
;第一次  ??0已经定义 $sVar 赋值
;第二次  ??1已经定义  $sVar 赋值
;第三次  ??2已经定义  $sVar 赋值    
;第四次  ??3已经定义  $sVar 赋值
;第五次  ??4没有定义  终止本次循环
;第六次  ??5没有定义  终止本次循环
;第七次  ??6已经定义  $sVar 赋值 
;第八次  ??7已经定义  $sVar 赋值
;第九次  ??8已经定义  $sVar 赋值
;第十次  ??9已经定义  $sVar 赋值

;综所上述, 这断代码的做用是从一个数组中找出出现了多次的元素。
所以,这段代码可以做一个函数来调用。 使用的时候直接调用函数,返回值就是一个数组。
Func FindSameNum($aArray)
        Local $sRandomSep = Random(1, 1000) & Random(2000, 3000) & Random(4000, 5000)
        Local $sVar
    For $i = 0 To Ubound($aArray) - 1    ;这个循环的意思是,将数组中的所有元素定义成一个变量。
                If Not IsDeclared(".." & $aArray[$i]) Then ;如果变量.. $aArray[$i]没有定义,
                        Assign(".." & $aArray[$i], $i)  ;那么将它定义并赋值为$i
                Else  ;如果定义了
                        Assign("??" & $i, 0)  ;那么就定义循环变量为一个??$i的变量,赋值为0.
                        If Not IsDeclared("??" & Eval(".." & $aArray[$i])) Then ;如果变量??(.. $aArray[$i])没有定义,
                                Assign("??" & Eval(".." & $aArray[$i]), 0)  ;那么将量??(.. $aArray[$i])赋值为0.
                        EndIf
                EndIf
        Next
        For $i = 0 To Ubound($aArray) - 1;这个循环的功能是从数组中找出出现了多次的。
                If Not IsDeclared("??" & $i) Then ContinueLoop  ;如果没有定义??$i的变量,那么终止本次循环。
                $sVar &= $aArray[$i] & $sRandomSep  ;如果定义了则将数组中的该元素组合随机数,存入变量。
        Next
        $sVar = StringRegExp($sVar, "(?U)(.*)" & $sRandomSep, 3)  ;从$sVar中提取字符。
        Return $sVar
EndFunc

评分

参与人数 3金钱 +90 收起 理由
3mile + 30 学习了
afan + 30
水木子 + 30 学习啦!

查看全部评分

发表于 2010-10-20 13:40:54 | 显示全部楼层
高手就是不一样,我这样的垃圾看不懂,哎,
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 08:27 , Processed in 0.088943 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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