XP is just a number PerlMonks

### Re: Top and bottom 10 percent elements of an array

by codeacrobat (Chaplain)
 on Apr 29, 2010 at 06:20 UTC ( #837456=note: print w/replies, xml ) Need Help??

How about a solution with map.
```@array = (2 ,4, 3, 8, 9, 12, 13, 20, 18, 7 );

my \$c=0;
@sort_a_pos = sort {\$a->[1]<=>\$b->[1]} map { [\$c++ => \$_] } @array;

\$pct = @array  / 10;

\$_->[1] = "B" for @sort_a_pos[0 .. \$pct];
\$_->[1] = "-" for @sort_a_pos[\$pct+1 .. \$#array-\$pct-1];
\$_->[1] = "A" for @sort_a_pos[\$#array-\$pct .. \$#array];

@finalarray  = map {\$_->[1] } sort { \$a->[0] <=> \$b->[0] } @sort_a_pos
+;

print "@finalarray";
[download]```

print+qq(\L@{[ref\&@]}@{['@'x7^'!#2/"!4']});

Replies are listed 'Best First'.
Re^2: Top and bottom 10 percent elements of an array
by ikegami (Pope) on Apr 29, 2010 at 18:38 UTC
```\$_->[1] = "B" for @sort_a_pos[0 .. \$pct];
\$_->[1] = "-" for @sort_a_pos[\$pct+1 .. \$#array-\$pct-1];
\$_->[1] = "A" for @sort_a_pos[\$#array-\$pct .. \$#array];
[download]```
should be
```\$_->[1] = "B" for @sort_a_pos[0 .. \$pct-1];
\$_->[1] = "-" for @sort_a_pos[\$pct .. \$#array-\$pct-1];
\$_->[1] = "A" for @sort_a_pos[\$#array-\$pct .. \$#array];
[download]```

You probably got confused (like me) by the OP's weird math of 10 * 10% = 2. The output he gave was for 20%.

Log In?
 Username: Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://837456]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (1)
As of 2021-09-19 02:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?

No recent polls found

Notices?