数组里包含的N个数值随机输出且只输出一次
一个数组包含N个数值,要求把该数组里的所有数值乱序输出到文本且没有重复的(每个数值只输出一次)。求AU3的代码。谢谢 每输出都检查一次。 回复 2# itljl
能给完整代码吗 #include <Array.au3>
Dim $a=
$s = UBound($a) - 1;假设不知道a的下标,求出
For $i = 0 To $s
$d = Random($i,$s,1)
_ArraySwap($a[$i],$a[$d])
Next
_ArrayDisplay($a) 回复 4# 风行者
风行哥,你QQ多少 本帖最后由 netegg 于 2012-1-1 21:36 编辑
#Include <Math.au3>
_RandomUnique
新加的函数,把索引随机排列下,匹配上对应值就行了
或者这样For $i = 1 To UBound($aInput) * 10
$A = Random(0, UBound($aInput) - 1, 1)
$B = Random(0, UBound($aInput) - 1, 1)
$Temp = $aInput[$A]
$aInput[$A] = $aInput[$B]
$aInput[$B] = $Temp
Next #Include
_RandomUnique
新加的函数,把索引随机排列下,匹配上对应值就行了
netegg 发表于 2012-1-1 19:34 http://www.autoitx.com/images/common/back.gif
学习了! 马上查查看! #include <array.au3>
Dim $a =
$fin = _Array_Random($a)
_ArrayDisplay($fin)
Func _Array_Random($Array)
Local $oD = ObjCreate('Scripting.Dictionary')
Local $i
For $i In $Array
If Not $oD.Exists($i) Then $oD.Add($i, 0);先去掉重复
Next
Local $outA = $oD.Keys()
$oD.RemoveAll;释放资源
$oD = ""
For $k = 1 To 7;据说"完美"的洗牌次数是7次
For $n = 0 To UBound($outA) - 1
_ArraySwap($outA[$i], $outA)
Next
Next
Return $outA
EndFunc ;==>_Array_Random
其实简单的东西,请大哥,大姐们,别复杂化 风行者 的代码就不错,简单容易懂 回复 10# 5735988
不对,风行那个代码随索引变大,到最后就丧失随机性了 回复5735988
不对,风行那个代码随索引变大,到最后就丧失随机性了
netegg 发表于 2012-1-2 09:59 http://www.autoitx.com/images/common/back.gif
说的很对 本帖最后由 zitoy 于 2012-1-31 13:36 编辑
Local $oD = ObjCreate('Scripting.Dictionary')
第一次看到这个,找了找:
VBScript和Jscript都提供类似的对象,通称Scripting.Dictionary对象或Dictionary对象。它类似于二维数组,把键和相关条目的数据存放在一起。然而真正的面向对象的方法,不应直接访问数据条目,必须使用Dictionary对象支持的方法和属性来实现。 向高手学习,有用的提示 学习了,新加的函数好用
页:
[1]