我有一个八个字符串的数组,我想以随机顺序放在舞台上(使用TextFields)。
我可以毫无问题地选择任何8个字符串,使用Math.random选择0-7之间的数字并将该项目放在舞台上。
但我正在努力防止重复加入。有没有人有什么建议?
谢谢
答案 0 :(得分:1)
随机播放阵列,然后循环播放。可以在这里找到一些很好的例子:
答案 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个元素,直到你没有剩下。这可以确保您永远不会有重复。