actionscript remove(concat?)子数组

时间:2013-03-22 10:57:07

标签: actionscript-3 concatenation arrays

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

我想避免" concat"方法,因为数组已经在MasterArray中。有命令/方法怎么做? 谢谢。

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

var europeanCities:Array = [englandCities, franceCities];

我想指出......对伦敦"伦敦"以某种方式嵌套在europeanCities数组中。 在我试图追踪它之后,它给了我" englandCities",这是有道理的。

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

如何让euroCities数组显示"伦敦" ? 我需要从" europeanCities"中删除这些方形支架。数组没有使用concat()thingie ...

好的,让我稍微改一下。我的主阵列:

var europeanCities:Array = [englandCities, franceCities];

等于

[[London, Manchester, Leeds], [Paris, Orleans, Avignon]];
我是对的吗?现在,如何删除内部括号以获得类似的内容:

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

请记住,阵列比英格兰城市和法国城市要长得多......有30个不同的城市。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

如果你坚持不使用concat,这是一个糟糕的解决方案:

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

由于子数组元素自动将与','连接,无论连接分隔符和我们的连接分隔符已经','这将起作用。

但是这个解决方案是cpu密集型而不是最佳的。

答案 2 :(得分: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而不是原始String,则连接的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