【发布时间】:2014-04-04 01:02:42
【问题描述】:
以下函数将用户输入用于用户所选范围的开始和结束课程,然后使用循环拉出每个课程数组(从数组数组中),然后将其随机拼接成一个新数组。例如,选择第 3 到第 5 课的最终结果是,新数组 (randArray) 包含随机范围内每节课的所有数据,前三个,然后是四个,然后是五个。这一切都很好,但我可以想象这可能不是最有效的方法。从现有数组的子集创建新数组的最紧凑和最有效的方法是什么?由于它运作良好,我很满意,但会着迷于学习更好的方法并知道为什么它们更好(除了更紧凑)。我之所以选择这种方法,是因为已经有很多代码可以在一个数组中使用单个课程,这让我可以在一个数组中添加一系列课程,而无需更改任何其他代码。
function initializeRange():void {
for (i = startLesson; i < (endLesson + 1); i++) {
switch (i) {
case 1:
duplicate = elementArray[i].slice(0);
while (duplicate.length > 1 ) {
randArray.push(duplicate.splice(Math.ceil(Math.random() *
(duplicate.length - 1)), 1)[0]);
}
break;
case 2:
duplicate = elementArray[i].slice(0);
while (duplicate.length > 1 ) {
randArray.push(duplicate.splice(Math.ceil(Math.random() *
(duplicate.length - 1)), 1)[0]);
}
break;
case 3:
duplicate = elementArray[i].slice(0);
while (duplicate.length > 1 ) {
randArray.push(duplicate.splice(Math.ceil(Math.random() *
(duplicate.length - 1)), 1)[0]);
}
break;
//case "etc.":
//and so on for the rest of the lessons
}
}
}
【问题讨论】:
-
您需要使用
Math.floor()而不是Math.ceil()否则数组的第一个元素将永远不会进入结果数组。否则,你的方法很好。
标签: arrays actionscript-3