【问题标题】:actionscript remove (concat?) sub-arraysactionscript 删除(concat?)子数组
【发布时间】:2013-03-22 10:57:06
【问题描述】:

我在一个巨大的数组中拥有多个子数组 - MasterArray - 这意味着子数组已经在 MasterArray 内部。我想“融合”所有这些子数组 - 删除那些 [ ] 方括号。

我想避免使用“concat”方法,因为数组已经在 MasterArray 中。有没有命令/方法如何做到这一点? 谢谢。

var englandCities:Array = [London, Manchester, Leeds];
var franceCities:Array = [Paris, Orleans, Avignon];

var europeanCities:Array = [englandCities, franceCities];

我想以某种方式指出嵌套在欧洲城市数组中的“伦敦”。 在我尝试追踪它之后,它给了我“englandCities”,这是有道理的。

trace(europeanCities[0]);
// displays "englandCities"
// how can I make it display "London" ?

如何使 euroCities 数组显示 "London" ? 我需要在不使用 concat() 的情况下从“europeanCities”数组中删除那些方括号...

好的,让我重新表述一下。我的主阵列:

var europeanCities:Array = [englandCities, franceCities];

等于

[[London, Manchester, Leeds], [Paris, Orleans, Avignon]];

我说的对吗?现在,如何删除内括号以获得如下内容:

[London, Manchester, Leeds, Paris, Orleans, Avignon];

请记住,该数组比 englandCities 和 frenchCities 长得多......有大约......30 个不同的城市。

【问题讨论】:

    标签: actionscript-3 concatenation arrays


    【解决方案1】:

    你可以很容易地concat他们在一起,这确实是最简单的选择:

    var englandCities:Array = ["London", "Manchester", "Leeds"];
    var frenchCities:Array = ["Paris", "Orleans", "Avignon"];
    var masterArray:Array = [englandCities, frenchCities];
    
    var europeanCities:Array = new Array();
    
    for each(var country:Array in masterArray) {
        europeanCities = europeanCities.concat(country);
    }
    
    trace(europeanCities); // London,Manchester,Leeds,Paris,Orleans,Avignon
    

    我不确定我是否理解您为此避免 concat 的原因,除非问题是您不想重复这些值。 (所以修改englandCities[0]也会修改europeanCities[0]。)

    如果您的城市是Objects 而不是原始的Strings,则串联的Array 可以正常工作。但是,如果它们是原语,则无法使用Array 来执行此操作。但是,您可以编写一个 函数 来提供类似这样的行为:

    var englandCities:Array = ["London", "Manchester", "Leeds"];
    var frenchCities:Array = ["Paris", "Orleans", "Avignon"];
    var allCities:Array = [englandCities, frenchCities];
    
    function europeanCities(id:int):String {
        var cityID:uint = 0;
        while (id > allCities[cityID].length - 1) {
            id -= allCities[cityID].length;
            cityID++;
        }
        return allCities[cityID][id];
    }
    
    trace (europeanCities(0)); // London
    trace (europeanCities(5)); // Avignon
    

    【讨论】:

    • 好吧,你们都认为 concat 是最好的做法吗?如果是的话,我可能会尝试这样做......我想避免它,因为我的代码已经包含超过 100 个数组......但话又说回来......再一个数组不会受到伤害,对吧..? :)
    • 是的,这有点奇怪。我用一个简单的 concat 循环编辑了我的答案。
    • 感谢大卫。我将“for each”技巧与 concat 方法结合使用,不知何故它奏效了!因为我是一个 AS3 初学者,所以我不太了解“while”的东西。但关键是它有效:)干杯兄弟:)
    • 太棒了! while 部分检查 id 是否太高而不能在第一组城市中,然后逐步遍历它们直到找到正确的组。如果一切都解决了,您可以单击勾选接受答案并将您的问题标记为已解决(并获得一点奖励代表)。干杯。
    【解决方案2】:

    创建一个空数组,然后遍历masterArray 获取任何子数组,并为您的新数组执行concat()。这将使您成为另一个平坦的阵列,而不会干扰主阵列。

    【讨论】:

    • 但我想说的是避免“concat”:) 有什么想法吗?
    • 你想显示europeanCities[0][0]吗?
    • 为此 +1 ... @user1832012 concat 有什么问题? Concat 成新数组,然后使 euroCities = yourNewArray;
    【解决方案3】:

    我只是在这里写这个,因为它是可能的。

    如果你坚持不使用 concat 这里是一个不好的解决方案:

     // join elements into a comma delimited string
     var s: String = europeanCities.join(','); 
     // Split the string with delimiter as commas
     europeanCities = s.split(',');  
    

    因为无论连接分隔符如何,子数组元素都会自动使用“,”连接,并且我们的连接分隔符已经是“,”这将起作用。

    但是这个解决方案是 CPU 密集型的,并不是最优的。

    【讨论】:

    • 感谢您的建议..我想我还是会使用 concat 方法:)
    猜你喜欢
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2011-11-05
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多