AS3 - 防止从阵列中选择重复项

时间:2013-05-02 12:32:06

标签: arrays actionscript-3 flash random duplicates

我有一个八个字符串的数组,我想以随机顺序放在舞台上(使用TextFields)。

我可以毫无问题地选择任何8个字符串,使用Math.random选择0-7之间的数字并将该项目放在舞台上。

但我正在努力防止重复加入。有没有人有什么建议?

谢谢

4 个答案:

答案 0 :(得分:1)

随机播放阵列,然后循环播放。可以在这里找到一些很好的例子:

http://bost.ocks.org/mike/shuffle/

答案 1 :(得分:0)

var source:Array = ["one", "two", "three", "four", "five", "six", "seven", "eight"];
var displayedIndices:Array = [];

var index:uint = Math.floor(Math.random())*source.length;
displayedIndices.push(index);
var newString:String = source[index];
addChildAt(myTextField(newString), index); //I suppose myTextField creates a textfield and returns it

//now you want to be sure not to add the same string again
//so you take a random index until it hasn't already been used
while (displayedIndices.indexOf(index) != -1)
{
   index = Math.floor(Math.random())*source.length;
}
//there your index has not already been treated
displayedIndices.push(index);
var newString:String = source[index];
addChildAt(myTextField(newString), index);

这段代码很教育,你应该只使用它的第二部分。

答案 2 :(得分:0)

每次运行math.random函数时,使用splice从数组中删除结果索引处的字符串。

答案 3 :(得分:0)

这是你可以做到的一种方式:

var strings:Array = ["one", "two", "three", "four", "five", "six"];

// create a clone of your array that represents available strings  
var available:Array = strings.slice();

// choose/splice a random element from available until there are none remaining
while (available.length > 0)
{
   var choiceIndex:int = Math.random() * available.length;
   var choice:String = available[choiceIndex];
   available.splice(choiceIndex,1);
   trace (choice);
   // you could create a textfield here and assign choice to it
   // then add it to the display list
}

这个概念是你创建一个数组的克隆,然后随机从该数组中取出1个元素,直到你没有剩下。这可以确保您永远不会有重复。