本帖最后由 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
|