No such thing as a small change PerlMonks

### Re: Sorting large sets of geometric coordinates

by ikegami (Pope)
 on Apr 19, 2006 at 20:55 UTC ( #544436=note: print w/replies, xml ) Need Help??

in reply to Sorting large sets of geometric coordinates

A hash isn't appropriate, because nothing is guaranteed to be unique (as far as you've let on). You also ask to sort, and hashes are unordered.

```my @unsorted_data;
while (<DATA>) {
my @fields = /([\d.]+)/g or next;
push(@unsorted_data, \@fields);
}

my @sorted_data = sort {  \$a->[1] <=> \$b->[1]
|| \$a->[0] <=> \$b->[0] } @unsorted_data;

print("((\$_->[0] \$_->[1]) (\$_->[2] \$_->[3]))\n")
foreach @sorted_data;

Update: Tested. Fixed the print.

Update: Fixed the error discussed below.

Replies are listed 'Best First'.
Re^2: Sorting large sets of geometric coordinates
by thor (Priest) on Apr 20, 2006 at 02:43 UTC
```my @sorted_data = sort {  \$a->[1] <=> \$b->[1]
|| \$a->[0] <=> \$a->[0] } @unsorted_data;
Wouldn't the second part of that sort be a no-op?

thor

The only easy day was yesterday

It handles ties in \$row_ly. <=> returns 0 if the two things it compares are equal. For example, if the compare function were to be called to compare the following two rows,
```((5.0 0.4) (48.0 0.5))
((48.1 0.4) (99.0 0.5))
The first <=> would return 0 since \$a->[1] (0.4) and \$b->[1] (0.4) are both equal. It would then go on to compare \$a->[0] (5.0) with \$b->[0] (48.1)

Update: OOPS! Copy and paste error. The code should read:

```my @sorted_data = sort {  \$a->[1] <=> \$b->[1]
|| \$a->[0] <=> \$b->[0] } @unsorted_data;

Nod to BrowserUk for the head's up.

Create A New User
Node Status?
node history
Node Type: note [id://544436]
help
Chatterbox?
 [LanX]: it was just after Trump-ageddon and the Americans thought I'm ridiculing them ;) Discipulus was not the title a bit provoking? ;=) [LanX]: I have a degree in cynism. .. LanX is the PROVO-KING

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (8)
As of 2017-11-20 19:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
In order to be able to say "I know Perl", you must have:

Results (292 votes). Check out past polls.

Notices?