Solved

# Sortting an array

Posted on 2009-07-08
259 Views
I have a list of names like this.

[0]Bob
[1]Joe
[2]Bob
[3]Bob
[4]Bob
[5]Joe
[6]Phil
[7]Phil

I want to sort my array without changing it so that its like this (so basically give an alternative index of elements so its like this):

[0]Bob
[2]Bob
[3]Bob
[4]Bob
[1]Joe
[5]Joe
[6]Phil
[7]Phil

``````#Class contains the name information.

\$m=0;

\$no=0;

\$kl =0;

@keep=();

foreach (@Class){

\$test = \$no;

foreach \$u (0..\$#keep){

if (\$_=~m/\$keep[\$u]/){

\$no++;

} elsif (\$_ =~ m/^[ \t]*\$/){

\$Class[\$m]="CHECK MANUALLY";

}

}

if (\$no==\$test){

\$keep[\$kl] = \$_;

\$kl++;

}

\$m++;

}

@keep2=();

@index =();

\$indcount=0;

foreach \$hu (@keep){

foreach \$ij (0..\$#Class){

if (\$Class[\$ij] =~ m/\$hu/){

\$index[\$indcount]=\$ij;

\$indcount++;

}

}

}
``````
0
Question by:sanjangeorge

LVL 13

Expert Comment

ID: 24804265
To sort an array in ASCII (Alphabetical) order :
sort(@array);

Example of storing a sort result back into the same array :
@array = sort (@array);

To sort an array in reverse ASCII (Alphabetical) order :
sort {\$b cmp \$a} (@array);

To sort an array in numeric ascending order :
sort {\$a <=> \$b} (@array);

To sort an array in numeric decending order :
sort {\$b <=> \$a} (@array);

To print a sorted array but not alter the original :
print sort(@array);

To reverse the value elements in an array :
reverse (@array);

from http://www.htmlite.com/perl016.php
0

Author Comment

ID: 24804300
Yeah i've seen things like this not quite what im looking for
0

LVL 13

Expert Comment

ID: 24804351
if you are trying to sort the arrays and keep indices (old and new) maybe the data structure you are using isnt correct for you.
0

LVL 11

Expert Comment

ID: 24804470

``````#!/usr/bin/perl -w

use strict;

my @unsorted = (

"[0]Bob",

"[1]Joe",

"[2]Bob",

"[3]Bob",

"[4]Bob",

"[5]Joe",

"[6]Phil",

"[7]Phil"

);

my @sorted = sort {

\$a =~ /^\[(\d+)\](.*)\$/ or die "input \$a not in expected form\n";

my (\$a1, \$a2) = (\$1, \$2);

\$b =~ /^\[(\d+)\](.*)\$/ or die "input \$b not in expected form\n";

my (\$b1, \$b2) = (\$1, \$2);

\$a2 eq \$b2 ? \$a1 <=> \$b1 : \$a2 cmp \$b2;

} @unsorted;

print join("\n", @sorted)."\n";
``````
0

LVL 39

Accepted Solution

ID: 24804571

``````my @Unsorted = qw(Bob Joe Bob Bob Bob Joe Phil Phil);

print "array=\n" . join("",map {"    [\$_]\$Unsorted[\$_]\n"} (0..\$#Unsorted));

my @indexes = sort {\$Unsorted[\$a] cmp \$Unsorted[\$b]} (0..\$#Unsorted);

print "array=\n" . join("",map {"    [\$_]\$Unsorted[\$_]\n"} @indexes[0..\$#Unsorted]);
``````
0

LVL 84

Expert Comment

ID: 24806972
my @unsorted = (
"[0]Bob",
"[1]Joe",
"[2]Bob",
"[3]Bob",
"[4]Bob",
"[5]Joe",
"[6]Phil",
"[7]Phil"
);
\$\=\$/;
print for @sorted = map{/\0(.*)/}sort map{join"\0",(/([][\d]*(.*))/)[1,0]} @unsorted ;
0

## Featured Post

### Suggested Solutions

There are many situations when we need to display the data in sorted order. For example: Student details by name or by rank or by total marks etc. If you are working on data driven based projects then you will use sorting techniques very frequently.…
This article is meant to give a basic understanding of how to use R Sweave as a way to merge LaTeX and R code seamlessly into one presentable document.
Learn the basics of modules and packages in Python. Every Python file is a module, ending in the suffix: .py: Modules are a collection of functions and variables.: Packages are a collection of modules.: Module functions and variables are accessed us…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.