Combinations
本帖最后由 afan 于 2010-8-26 14:28 编辑很郁闷,6以内不会出错,超过6的话在第5次就会提示数组错误,我的版本是3.3.3.3,各位可以测试下以下代码:#include <Array.au3>
Dim $aArray =
For $i = 1 To UBound($aArray)
$aArrayCombo = _ArrayCombinations($aArray, $i, ",")
_ArrayDisplay($aArrayCombo, "iSet = " & $i)
Next以上的会出错,而减到6以内都会正常返回,如以下:#include <Array.au3>
Dim $aArray =
For $i = 1 To UBound($aArray)
$aArrayCombo = _ArrayCombinations($aArray, $i, ",")
_ArrayDisplay($aArrayCombo, "iSet = " & $i)
Next改用30#的文件替换后解决。为使版本配套的其它函数正常使用,用旧版的替换当然不妥,现将正确的函数提取出来,大家可直接调用更名的函数 “___ArrayCombinations()”
(需注意的是,经测试,大于20仍会出错)Func ___ArrayCombinations(ByRef $avArray, $iSet, $sDelim = "")
Local $i, $aIdx, $aResult, $iN = 0, $iR = 0, $iLeft = 0, $iTotal = 0, $iCount = 1
If Not IsArray($avArray) Then Return SetError(1, 0, 0)
If UBound($avArray, 0) <> 1 Then Return SetError(2, 0, 0)
$iN = UBound($avArray)
$iR = $iSet
Dim $aIdx[$iR]
For $i = 0 To $iR - 1
$aIdx[$i] = $i
Next
$iTotal = ___Array_Combinations($iN, $iR)
$iLeft = $iTotal
ReDim $aResult[$iTotal + 1]
$aResult = $iTotal
While $iLeft > 0
___Array_GetNext($iN, $iR, $iLeft, $iTotal, $aIdx)
For $i = 0 To $iSet - 1
$aResult[$iCount] &= $avArray[$aIdx[$i]] & $sDelim
Next
If $sDelim <> "" Then $aResult[$iCount] = StringTrimRight($aResult[$iCount], 1)
$iCount += 1
WEnd
Return $aResult
EndFunc ;==>___ArrayCombinations
Func ___Array_Combinations($iN, $iR)
Local $i, $iNFact = 1, $iRFact = 1, $iNRFact = 1
For $i = $iN To 2 Step -1
$iNFact *= $i
Next
For $i = $iR To 2 Step -1
$iRFact *= $i
Next
For $i = $iN - $iR To 2 Step -1
$iNRFact *= $i
Next
Return $iNFact / ($iRFact * $iNRFact)
EndFunc ;==>___Array_Combinations
Func ___Array_GetNext($iN, $iR, ByRef $iLeft, $iTotal, ByRef $aIdx)
Local $i, $j
If $iLeft == $iTotal Then
$iLeft -= 1
Return
EndIf
$i = $iR - 1
While $aIdx[$i] == $iN - $iR + $i
$i -= 1
WEnd
$aIdx[$i] += 1
For $j = $i + 1 To $iR - 1
$aIdx[$j] = $aIdx[$i] + $j - $i
Next
$iLeft -= 1
EndFunc ;==>___Array_GetNext 3.3.1.1 测试,一切正常! 回复 2# 水木子
看来还是3311好哦~~ 回复 3# afan
嗯!一直用的3.3.1.1,感觉相对比较稳定,后面的版本也用过,总有些问题。 晕,换回3311还是出错: 晕 看了不能用最新的啊 回复 6# franky
测试没? 不会只有木子一个人来帮忙测试吧~ 晕…… 我测试也是错误的,用的3.3.3.3 同是3.3.1.1,同是5#的错误。 难道咱们的RP都不如木子童鞋~~~? 哈~~ 木子不是测试的第二段吧…… 前错后不错。测试完毕。 呵呵,这是偶的测试结果,是第一个,而不是第二个!
如图:
3.3.2.0我运行两个都没出现什么错误 回复 14# catcher
你确定运行第一段没有错吗? 我简单的试了3320的Array.au3,仍错~
能否贴下运行到第7次的截图?