Beefy Boxes and Bandwidth Generously Provided by pair Networks vroom
Problems? Is your data what you think it is?
 
PerlMonks  

Re: Sort based on a delimited field in array elements without affecting original array elements

by patgas (Friar)
on Mar 01, 2002 at 18:14 UTC ( [id://148716]=note: print w/replies, xml ) Need Help??

This is an archived low-energy page for bots and other anonmyous visitors. Please sign up if you are a human and want to interact.


in reply to Sort based on a delimited field in array elements without affecting original array elements

My solution uses the Schwartizan Transform, a good technique to get familiar with when you're doing more complicated sorting...

First, you want to use map to turn each element of the array into an arrayref that contains the split-up line. Then, you sort based on the 1st (not 0th) element of the arrayref, which is the first field of your line. Then, you use another map to return the array element back to normal. Voila:

#!/usr/bin/perl -w use strict; use Data::Dumper; chomp( my @array = <DATA> ); @array = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, split /!/ ] } @array; print Dumper \@array; __DATA__ 100!100!key!date!2.. 100!100!key!store! 110!110!P\d\d\d_.*\.\d{6,}\.EMRemr 120!125! 1!yeada 130!132! 140!133! 150!134! 500!blah 160!135!arbor_ama 503!blah 170!136! 505!blah 180!137! 190!138!

"We're experiencing some Godzilla-related turbulence..."

  • Comment on Re: Sort based on a delimited field in array elements without affecting original array elements
  • Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://148716]
help
Sections?
Information?
Find Nodes?
Leftovers?
    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.