Actionscript 3 actionscript移除(concat?)子数组

Actionscript 3 actionscript移除(concat?)子数组,actionscript-3,concatenation,arrays,Actionscript 3,Concatenation,Arrays,我在一个巨大的数组(MasterArray)中有多个子数组,这意味着子数组已经在MasterArray中了。我想“融合”所有这些子数组-删除那些[]方括号 我想避免使用“concat”方法,因为数组已经在MasterArray中了。是否有一个命令/方法来执行此操作? 多谢各位 var englandCities:Array = [London, Manchester, Leeds]; var franceCities:Array = [Paris, Orleans, Avignon]; var

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

我想避免使用“concat”方法,因为数组已经在MasterArray中了。是否有一个命令/方法来执行此操作? 多谢各位

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

var europeanCities:Array = [englandCities, franceCities];
我想指出,比方说……以某种方式嵌套在europeanCities数组中的“伦敦”。 在我试图追踪它之后,它给了我“英格兰城市”,这是有道理的

trace(europeanCities[0]);
// displays "englandCities"
// how can I make it display "London" ?
如何使europeanCities阵列显示“伦敦”? 我需要从“europeanCities”数组中删除这些方括号,而不使用concat()thingie

好吧,让我换一种说法。我的主阵列:

var europeanCities:Array = [englandCities, franceCities];
等于

[[London, Manchester, Leeds], [Paris, Orleans, Avignon]];
我说得对吗?现在,如何拆下内支架以获得如下效果:

[London, Manchester, Leeds, Paris, Orleans, Avignon];
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

请记住,该数组比英格兰城市和法国城市长得多……大约有……30个不同的城市。

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

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

我之所以写在这里,是因为这是可能的

如果您坚持不使用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,这里有一个糟糕的解决方案:

 // join elements into a comma delimited string
 var s: String = europeanCities.join(','); 
 // Split the string with delimiter as commas
 europeanCities = s.split(',');  
由于子数组元素将自动以“,”连接,而不管连接分隔符是什么,并且我们的连接分隔符已经是“,”了,这将起作用


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

您可以轻松地将它们组合在一起,这确实是最简单的选择:

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]

如果您的城市是
对象
而不是原始的
字符串
s,则串联的
数组
可以正常工作。如果它们是原语,那么使用
数组
就无法做到这一点。但是,您可以编写一个函数来提供类似的行为,如下所示:

[London, Manchester, Leeds, Paris, Orleans, Avignon];
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

您可以轻松地将它们组合在一起,这确实是最简单的选择:

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]

如果您的城市是
对象
而不是原始的
字符串
s,则串联的
数组
可以正常工作。如果它们是原语,那么使用
数组
就无法做到这一点。但是,您可以编写一个函数来提供类似的行为,如下所示:

[London, Manchester, Leeds, Paris, Orleans, Avignon];
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”:)有什么想法吗?你想为此显示
欧洲城市[0][0]
?+1吗@user1832012 concat有什么问题?合并到新数组中,然后使europeanCities=yourNewArray;但我想说的一点是避免“concat”:)有什么想法吗?你想为此显示
欧洲城市[0][0]
?+1吗@user1832012 concat有什么问题?合并到新数组中,然后使europeanCities=yourNewArray;好吧,你们都认为海螺是最好的选择吗?如果是的话,我可能会尝试这样做……我想避免这样做,因为我的代码已经包含100多个数组……但话说回来……再多一个数组也不会有什么坏处,对吗?:)是的,这是一件很奇怪的事。我用一个简单的concat循环编辑了我的答案。谢谢大卫。我使用了“每一个”的技巧结合concat方法,不知怎的,它起了作用!因为我是AS3的初学者,所以我不太理解“while”这个词。但关键是它有效:)干杯,兄弟:)太好了!
while
部分检查id是否太高,无法进入第一组城市,然后逐级检查,直到找到正确的城市组。如果已经解决了所有问题,您可以单击勾号接受答案,并将您的问题标记为已解决(并获得一点奖励)。干杯,好吧,你们都认为海螺是最好的选择吗?如果是的话,我可能会尝试这样做……我想避免这样做,因为我的代码已经包含100多个数组……但话说回来……再多一个数组也不会有什么坏处,对吗?:)是的,这是一件很奇怪的事。我用一个简单的concat循环编辑了我的答案。谢谢大卫。我使用了“每一个”的技巧结合concat方法,不知怎的,它起了作用!因为我是AS3的初学者,所以我不太理解“while”这个词。但关键是它有效:)干杯,兄弟:)太好了!
while
部分检查id是否太高,无法进入第一组城市,然后逐级检查,直到找到正确的城市组。如果已经解决了所有问题,您可以单击勾号接受答案,并将您的问题标记为已解决(并获得一点奖励)。干杯。谢谢你的建议。我想我还是会用康卡特方法:)谢谢你的建议。我想我还是会用康卡特方法:)