【问题标题】:actionscript: assembling an new array from many arraysactionscript:从许多数组中组装一个新数组
【发布时间】: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


【解决方案1】:

您可以使用push.applyconcat

他们都在做同样的事情——向特定数组添加元素,提供另一个数组的子集。无论哪种方式,您都必须选择 (splice) 您需要添加的子集。

这两种方法要好得多,因为您不需要遍历所有项目(可能是数千个)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多