![]() |
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| snabb sed fråga | vbm | Shell-programmering och Skript | 2 | 11-09-2006 10:44 |
| Ok snabb fråga | Corrail | Shell-programmering och Skript | 1 | 11-11-2005 01:49 |
| Quick perl fråga | jason_v | Shell-programmering och Skript | 7 | 11-26-2003 04:31 |
| Snabb fråga | catbad | UNIX for Dummies Frågor & Svar | 7 | 03-25-2003 07:01 |
| Snabb fråga | Tracy Hunt | UNIX for Dummies Frågor & Svar | 3 | 02-20-2001 04:20 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
[B] Perl slags snabb fråga [/ B]
Jag har gjort en sammanfattning av Google om detta, men kunde inte hitta det svar jag vill ha.
Säg, finns det en rad som denna: @ A \u003d qw (CD1 A1 ef a2 hij a12 b2 B4 B22); Jag vill sortera array i det första beslutet: @ sorterade \u003d qw (A1 A12 A2 B2 B22 B4 CD1 ef hij); Och andra ordningen: @ sorterade \u003d qw (A1 A2 A12 B2 B4 B22 CD1 ef hij); Finns det något sätt att göra detta Perl utan att använda moduler? Tack så mycket! Senast redigerad av zx1106; 10-09-2008 at 12:44.. |
|
||||
|
Ja, du kan sortera med en egen regel. Men vad är regeln för slags? Om du inte kan arbeta fram en formell specifikation av det slag, kommer ingen att kunna göra det "korrekt".
Följande ger samma beställning som du nämnde, men det finns ingen garanti att det kommer att ge dig den "riktiga" beställning (som du kan förvänta dig) för andra indata: Kod:
use Data::Dumper;
@A = qw(cd1 a1 ef a2 hij a12 b2 b4 b22);
print Dumper([sort {
my ($_a, $_b);
for ([$a, \$_a], [$b, \$_b]) {
$_->[0] =~ /^(.+?)(\d*)$/;
${$_->[1]} = [$1, $2];
}
($$_a[0] cmp $$_b[0]) || ($$_a[1] <=> $$_b[1]);
} @A]);
|
|
||||
|
Andra ordningen som verkar vara först sortering alpha sedan siffra:
Kod:
my @A = qw(cd1 a1 ef a2 hij a12 b2 b4 b22);
my @sorted = map{$_->[2]}
sort{$a->[0] cmp $b->[0] || $a->[1] <=> $b->[1]}
map{/([a-z]*)(\d*)/;[$1,$2,$_]} @A;
print "$_\n" for @sorted;
|