user1832012
user1832012

Reputation:

actionscript remove (concat?) sub-arrays

I have multiple sub-arrays in one huge array - MasterArray- meaning that the sub-arrays are already INSIDE the MasterArray. I would like to "fuse" all of those sub-arrays - to remove those [ ] square brackets.

I would like to avoid the "concat" method because the arrays are already inside the MasterArray. Is there a command/method how to do this? Thank you.

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

var europeanCities:Array = [englandCities, franceCities];

I would like to point let's say...to "London" nested in the europeanCities array somehow. After I try to trace it, it gives me "englandCities", which makes sense.

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

How can I make the europeanCities array to display "London" ? I NEED TO REMOVE THOSE SQUARE BRACES from the "europeanCities" array WITHOUT using the concat() thingie...

OKAY let me rephrase this a bit. My master array:

var europeanCities:Array = [englandCities, franceCities];

equals to

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

am I right? And now, how to remove the inner brackets in order to get something like this:

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

And please, keep in mind, that the array is much longer than englandCities and frenchCities....there are like...30 different Cities.

Upvotes: 0

Views: 163

Answers (3)

David Mear
David Mear

Reputation: 2254

You can concat those together easily, and it really is the simplest option:

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

I'm not sure I understand your reason for avoiding concat for this, unless the issue is it that you don't want to duplicate the values. (So modifying englandCities[0] will also modify europeanCities[0].)

If your cities are Objects rather than primitive Strings, a concatenated Array will work fine. If they are primitives though, there's no way to do this with an Array. You could however write a function to provide similar behaviour like this:

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

Upvotes: 1

Volkan
Volkan

Reputation: 2210

I just write this here because it is possible.

If you insist on not using concat here is one bad solution:

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

Since the subarray elements automatically will be joined with ',' regardless of join delimiter and our join delimiter is already ',' this will work.

But this solution is cpu intensive and not optimal.

Upvotes: 1

Vesper
Vesper

Reputation: 18747

Create an empty array, then traverse the masterArray taking any sub-arrays, and do a concat() for your new array. This will make you another array that's flat, without disturbing master array.

Upvotes: 1

Related Questions