0

我在一个巨大的数组中有多个子数组 - 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 个不同的城市。

4

3 回答 3

1

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

于 2013-03-22T11:00:24.297 回答
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 密集型的,并不是最优的。

于 2013-03-22T12:46:41.607 回答
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
于 2013-03-22T16:24:47.583 回答