### Re: sort hash of arrays of arrays

by BrowserUk (Pope)
 on Oct 31, 2012 at 14:03 UTC ( #1001667=note: print w/replies, xml ) Need Help??

in reply to sort hash of arrays of arrays

So this is a 3-dimensional array...

Not the way you shown it isn't:

```@inner1 = (0, 1, 2);
@inner2 = (1, 4, 7);
@inner3 = (2, 5, 8);
@inner4 = (6, 7, 9);

@array1 = (@inner1, @inner2, @inner3, @inner4);;

print @array1;;
0 1 2 1 4 7 2 5 8 6 7 9

@array2 = (@inner1, @inner2, @inner3, @inner4);;

print @array2;;
0 1 2 1 4 7 2 5 8 6 7 9

%hash = (array1, @array1, array2, @array2);;
pp \%hash;;
{
"0"      => 1,
"1"      => 4,
"2"      => 5,
"4"      => 7,
"5"      => 8,
"6"      => 7,
"7"      => 9,
"8"      => 6,
"9"      => "array2",
"array1" => 0,
}

If that's the way you are building it in your program; it is little wonder your attempt to sort it didn't work?

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
font size=1

Replies are listed 'Best First'.
Re^2: sort hash of arrays of arrays
by maladav (Initiate) on Oct 31, 2012 at 14:43 UTC

Ok, sorry, it's not a multi-dimensional array this way. In my script I build it up from a tab-delimited text file as follows:

```my %hash;

while (<FILE>) {

chomp;
my @line = split("\t");
push(@{\$hash{\$line[1]}}, [@line]);

}

This, at the end, is a 3-D array.
How can I do the sort based on the 2nd item of the innermost array?

Thank you,

How can I do the sort based on the 2nd item of the innermost array?

Okay. So you have a hash of arrays of arrays; something like this:

```{
1 => [
[1, 2, 3],
[6, 7, 8],
[16, 17, 18],
[26, 27, 28]
],
2 => [
[2, 3, 4],
[7, 8, 9],
[17, 18, 19],
[27, 28, 29]
],
3 => [
[3, 4, 5],
[8, 9, 10],
[18, 19, 20],
[28, 29, 30]
],
4 => [
[4, 5, 6],
[9, 10, 11],
[19, 20, 21],
[29, 30, 31]
],
}

The second item of which innermost array?

Each outer array contains multiple arrays. Which of those do you which to sort on? The first? The last? All of them?

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

I'd like to sort the outer arrays of each hash item (1-4) separately, based on the second item of the inner arrays to finally have something like:

```{
1 => [
[26, 27, 28],
[16, 17, 18],
[6, 7, 8],
[1, 2, 3]
],
2 => [
[27, 28, 29],
[17, 18, 19],
[7, 8, 9],
[2, 3, 4],
],
3 => [
[28, 29, 30],
[18, 19, 20],
[8, 9, 10],
[3, 4, 5]
],
4 => [
[29, 30, 31],
[19, 20, 21],
[9, 10, 11],
[4, 5, 6]
],
}

So for the first set, values 2, 7, 17 and 27 were compared to get the right order.
I hope this clarifies my problem.

Thanks

Create A New User
Node Status?
node history
Node Type: note [id://1001667]
help
Chatterbox?

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (8)
As of 2018-06-24 16:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Should cpanminus be part of the standard Perl release?

Results (126 votes). Check out past polls.

Notices?