找回密码
 加入
搜索
查看: 8104|回复: 14

[AU3基础] 数组里包含的N个数值随机输出且只输出一次

 火.. [复制链接]
发表于 2012-1-1 18:35:06 | 显示全部楼层 |阅读模式
一个数组包含N个数值,要求把该数组里的所有数值乱序输出到文本且没有重复的(每个数值只输出一次)。

求AU3的代码。谢谢

评分

参与人数 1金钱 -10 收起 理由
afan -10

查看全部评分

发表于 2012-1-1 18:43:17 | 显示全部楼层
每输出都检查一次。
 楼主| 发表于 2012-1-1 18:50:34 | 显示全部楼层
回复 2# itljl

能给完整代码吗
发表于 2012-1-1 19:10:51 | 显示全部楼层
#include <Array.au3>
Dim $a[9]=[1,2,3,4,5,6,7,8,9]
$s = UBound($a) - 1  ;假设不知道a的下标,求出
For $i = 0 To $s
        $d = Random($i,$s,1)
        _ArraySwap($a[$i],$a[$d])
Next
_ArrayDisplay($a)

评分

参与人数 1金钱 +10 收起 理由
lpxx + 10

查看全部评分

 楼主| 发表于 2012-1-1 19:27:06 | 显示全部楼层
回复 4# 风行者


    风行哥,你QQ多少
发表于 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

评分

参与人数 1金钱 +14 收起 理由
lpxx + 14

查看全部评分

发表于 2012-1-1 20:58:45 | 显示全部楼层
#Include
_RandomUnique
新加的函数,把索引随机排列下,匹配上对应值就行了
netegg 发表于 2012-1-1 19:34



    学习了! 马上查查看!
发表于 2012-1-2 00:32:30 | 显示全部楼层
#include <array.au3>

Dim $a[18] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1]
$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[Random(0, UBound($outA) - 1, 1)])
                Next
        Next
        Return $outA
EndFunc   ;==>_Array_Random


评分

参与人数 1金钱 +18 收起 理由
lpxx + 18

查看全部评分

发表于 2012-1-2 01:37:51 | 显示全部楼层
其实简单的东西,请大哥,大姐们,别复杂化
发表于 2012-1-2 01:38:06 | 显示全部楼层
风行者 的代码就不错,简单容易懂
发表于 2012-1-2 09:59:34 | 显示全部楼层
回复 10# 5735988

不对,风行那个代码随索引变大,到最后就丧失随机性了
发表于 2012-1-31 01:34:31 | 显示全部楼层
回复  5735988

不对,风行那个代码随索引变大,到最后就丧失随机性了
netegg 发表于 2012-1-2 09:59



说的很对
发表于 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 | 显示全部楼层
向高手学习,有用的提示
发表于 2014-8-17 04:14:53 | 显示全部楼层
学习了,新加的函数好用
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-13 10:19 , Processed in 0.091743 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表