heavenm 发表于 2010-10-20 01:30:17

麻烦高人给这个代码加注释,看不到的说

#include <Array.au3>
Local $aArray = ["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)

netegg 发表于 2010-10-20 01:40:15

这是超人写的,估计高人也看不懂

chenronting 发表于 2010-10-20 07:20:22

哦。也~!吃大排,便超人~

lanfengc 发表于 2010-10-20 10:11:30

本帖最后由 lanfengc 于 2010-10-20 10:20 编辑

注释如下。 如有不对的地方,请指正。 让我也学习下。#include <Array.au3>
Local $aArray = ["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

lhy6456210 发表于 2010-10-20 13:40:54

高手就是不一样,我这样的垃圾看不懂,哎,
页: [1]
查看完整版本: 麻烦高人给这个代码加注释,看不到的说