![]() |
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Rules | Lenker | Album | FAQ | Medlemsliste | Kalender | Søke | Dagens innlegg | Marker forumene som lest |
| Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her. |
Mer UNIX og Linux Forum Emner Du kan finne nyttig
|
||||
| Tråd | Tråd startet | Forum | Svar | Siste innlegg |
| rask sed spørsmålet | vbm | Shell programmering og Skripting | 2 | 11-09-2006 10:44 |
| Ok raske spørsmål | Corrail | Shell programmering og Skripting | 1 | 11-11-2005 01:49 |
| Quick perl spørsmålet | jason_v | Shell programmering og Skripting | 7 | 11-26-2003 04:31 |
| Quick Spørsmål | catbad | UNIX for Dummies Spørsmål og svar | 7 | 03-25-2003 07:01 |
| Quick Spørsmål | Tracy Hunt | UNIX for Dummies Spørsmål og svar | 3 | 02-20-2001 04:20 |
![]() |
|
|
LinkBack | Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|
|
||||
|
[B] Perl slags rask spørsmålet [/ B]
Jeg har gjort en rask Google om dette, men fant ikke svaret jeg ønsker.
Si det er en matrise som dette: @ A \u003d qw (CD1 a1 ef a2 hij a12 B2 B4 B22); Jeg vil sortere tabellen i den første bestillingen: @ sortert \u003d qw (a1 a12 a2 b2 B22 B4 CD1 ef hij); Og andre rekkefølge: @ sortert \u003d qw (a1 a2 a12 B2 B4 B22 CD1 ef hij); Finnes det en måte å gjøre dette på Perl uten å bruke moduler? Thanks a lot! Sist endret av zx1106; 10-09-2008 kl 01:44.. |
|
||||
|
Ja, du kan sortere med en egendefinert regel. Men hva er egentlig regelen for den slags? Hvis du ikke kan komme fram til en formell spesifikasjon av den typen, vil ingen kunne gjøre det "riktig". Følgende gir samme bestilling som du nevnte, men det er ingen garanti for at den skal gi deg "riktig" bestilling (som du kan forvente) for andre input verdier: Code:
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]);
|
|
||||
|
Second ordre som ser ut til å være først sortere etter alfa og siffer: Code:
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;
Google "Schwartzian Transform" hvis interessert i hurtigbufrede nøkkelen slags teknikk. |
![]() |
| Hugseliste |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|