qq450196 发表于 2012-1-1 18:35:06

数组里包含的N个数值随机输出且只输出一次

一个数组包含N个数值,要求把该数组里的所有数值乱序输出到文本且没有重复的(每个数值只输出一次)。

求AU3的代码。谢谢

itljl 发表于 2012-1-1 18:43:17

每输出都检查一次。

qq450196 发表于 2012-1-1 18:50:34

回复 2# itljl

能给完整代码吗

风行者 发表于 2012-1-1 19:10:51

#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)

qq450196 发表于 2012-1-1 19:27:06

回复 4# 风行者


    风行哥,你QQ多少

netegg 发表于 2012-1-1 19:34:18

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

user3000 发表于 2012-1-1 20:58:45

#Include
_RandomUnique
新加的函数,把索引随机排列下,匹配上对应值就行了
netegg 发表于 2012-1-1 19:34 http://www.autoitx.com/images/common/back.gif


    学习了! 马上查查看!

3mile 发表于 2012-1-2 00:32:30

#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


5735988 发表于 2012-1-2 01:37:51

其实简单的东西,请大哥,大姐们,别复杂化

5735988 发表于 2012-1-2 01:38:06

风行者 的代码就不错,简单容易懂

netegg 发表于 2012-1-2 09:59:34

回复 10# 5735988

不对,风行那个代码随索引变大,到最后就丧失随机性了

lpxx 发表于 2012-1-31 01:34:31

回复5735988

不对,风行那个代码随索引变大,到最后就丧失随机性了
netegg 发表于 2012-1-2 09:59 http://www.autoitx.com/images/common/back.gif


说的很对

zitoy 发表于 2012-1-31 13:34:38

本帖最后由 zitoy 于 2012-1-31 13:36 编辑

Local $oD = ObjCreate('Scripting.Dictionary')

第一次看到这个,找了找:

VBScript和Jscript都提供类似的对象,通称Scripting.Dictionary对象或Dictionary对象。它类似于二维数组,把键和相关条目的数据存放在一起。然而真正的面向对象的方法,不应直接访问数据条目,必须使用Dictionary对象支持的方法和属性来实现。

单毛线 发表于 2013-1-2 18:19:34

向高手学习,有用的提示

chamlien 发表于 2014-8-17 04:14:53

学习了,新加的函数好用
页: [1]
查看完整版本: 数组里包含的N个数值随机输出且只输出一次