Solved

Sortting an array

Posted on 2009-07-08
6
259 Views
Last Modified: 2013-12-25
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++;

		}

	}

	

}

Open in new window

0
Comment
Question by:sanjangeorge
6 Comments
 
LVL 13

Expert Comment

by:kawas
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

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

Expert Comment

by:kawas
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
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 11

Expert Comment

by:climbgunks
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";

Open in new window

0
 
LVL 39

Accepted Solution

by:
Adam314 earned 500 total points
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]);

Open in new window

0
 
LVL 84

Expert Comment

by:ozo
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

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

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.

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now