Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

Edit to include code from martin_100's question on sorting lines based on column 2 of a space-delimited file:

print map { $_->[1] } sort { $a->[0] <=> $b->[0] } map { [(split /\s+/)[1], $_] } read_file( $ARGV[0] );

Let's read the code in reverse order.

Read the file
read_file( $ARGV[0] );

Start by reading in the file line by line.

Convert each line into an anonymous array: [ 'column 2 text', 'full line of text']
map { [(split /\s+/)[1], $_] }

The lines are passed (as $_) to the 'first' map. $_ is implicitly passed to split /\s+/, which splits the line on spaces. (Note: the , $_ has nothing to do with the split!) Since it is wrapped in (...)[1], the split output is treated like a list in which the 2nd element is returned. This, itself, is inside [ ..., $_], which gives you an anonymous array containing the second element from the split ((split /\s+/)[1]) and the entire original line ($_).

Sort arrays based on first element of array (e.g., 'column 2 text')
sort { $a->[0] <=> $b->[0] }

These anonymous arrays are all passed along to the sort. Sort orders the arrays based on the first element of each anonymous array, hence the ->[0].

Pass second elements of sorted arrays (e.g., 'full line of text') to print statement
map { $_->[1] }

Now the sorted anonymous arrays containing both the second column of text and the entire line of text are passed to the 'second' map. This map passes only the second element of each array (the full original line) to the print statement, thereby printing the lines sorted based on the second column!


In reply to Re: how does these map statements work by frozenwithjoy
in thread how does these map statements work by martin_100

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (6)
As of 2024-04-23 13:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found