/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Udtrække række fra matrice
Fra : F.Larsen


Dato : 18-04-01 22:34

Hej eksperter

Haves, et styk 2x4 matrice:
my @x = ([1,2,3,4],[5,6,7,8]);

Hvordan udtrækker man en vilkårlig række, f.eks. #2 :
($a,$b,$c,$d) = ?$?x{1};

?

--
Flemming



 
 
Adam Sjøgren (18-04-2001)
Kommentar
Fra : Adam Sjøgren


Dato : 18-04-01 23:55

On Wed, 18 Apr 2001 23:34:26 +0200, F Larsen wrote:

> Hej eksperter

Det er ikke mig, men jeg har fidlet mig frem til noget der ligner et svar.

> Haves, et styk 2x4 matrice:

("En matrix, flere matricer". ("En matrice" er en slags støbeform,
plejede de at drille os med når vi kaldte en matrix for en
matrice...))

> my @x = ([1,2,3,4],[5,6,7,8]);

> Hvordan udtrækker man en vilkårlig række, f.eks. #2 : ($a,$b,$c,$d)
> = ?$?x{1};

Flg. gør det ønskede:

virgil$ perl -e '
my @x=([1,2,3,4],[5,6,7,8]);
($a,$b,$c,$d)=@{$x[1]};
print "$a $b $c $d\n";'
5 6 7 8
virgil$

Finten er vist at @x er et array af to references til (anonyme) arrays
- derfor det extra @{} omkring.

Man ku' også gøre det så'n her:

virgil$ perl -e '
my @x=([1,2,3,4],[5,6,7,8]);
my $rr=$x[1];
my ($a,$b,$c,$d)=@$rr;
print "$a $b $c $d\n";'
5 6 7 8
virgil$

(Håber det er rigtigt


Mvh.

--
"All right, what's wrong with you? ...Like I care." Adam Sjøgren
"My foot hurts, doctor." "Your foot hurts?! What asjo@koldfront.dk
kind of stupid problem is that?!"

Stig H. Jacobsen (19-04-2001)
Kommentar
Fra : Stig H. Jacobsen


Dato : 19-04-01 04:08

On 19 Apr 2001 00:55:02 +0200, Adam Sjøgren wrote:

> Finten er vist at @x er et array af to references til (anonyme) arrays
> - derfor det extra @{} omkring.

Du kan gøre det lidt mere elegant med '->', f.eks. $x[2]->[0].

my @x=([1,2,3,4],[5,6,7,8]);

foreach my $i (0..$#x) {
foreach my $j (0..$#{$x[$i]}) {
print $x[$i]->[$j], "\n";
}
}

--
Stig

Peter Makholm (19-04-2001)
Kommentar
Fra : Peter Makholm


Dato : 19-04-01 07:35

"Stig H. Jacobsen" <nzaa7en001@sneakemail.com> writes:

> Du kan gøre det lidt mere elegant med '->', f.eks. $x[2]->[0].

Jeg er enig i at pil-notation generelt er pænere end en udfoldning af
en række referencer som Adam gør. Men ....

> foreach my $j (0..$#{$x[$i]}) {

.... når du alligevel gør på den måde, mener jeg ikke du har vundet
noget i læsevenlighed over:

print @{$x[1]};

--
hash-bang-slash-bin-slash-bash

Stig H. Jacobsen (19-04-2001)
Kommentar
Fra : Stig H. Jacobsen


Dato : 19-04-01 10:06

On 19 Apr 2001 08:34:56 +0200, Peter Makholm wrote:

> ... når du alligevel gør på den måde, mener jeg ikke du har vundet
> noget i læsevenlighed over:

Det kan man sikkert debattere længe - jeg ville bare nævne
muligheden :)

--
Stig

Adam Sjøgren (19-04-2001)
Kommentar
Fra : Adam Sjøgren


Dato : 19-04-01 13:38

On Thu, 19 Apr 2001 03:07:58 GMT, Stig H Jacobsen wrote:

> On 19 Apr 2001 00:55:02 +0200, Adam Sjøgren wrote:
>> Finten er vist at @x er et array af to references til (anonyme)
>> arrays - derfor det extra @{} omkring.

> Du kan gøre det lidt mere elegant med '->', f.eks. $x[2]->[0].

Jo - men så føles det ikke som om du udtrækker en række, så føles det
som om du tager et element af gangen explicit.

(Okay, okay ($a,...,$d) er ikke en særligt kamoufleret løkke, men...)

Hvad der er mest elegant kan man vist diskutere i lang tid - godt vi
har det dér slogan...


Mvh.

--
"Ja, så send to pakker, så jeg bedre Adam Sjøgren
kan få øje på dem!" asjo@koldfront.dk

Thorbjørn Ravn Ander~ (19-04-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 19-04-01 21:54

"Stig H. Jacobsen" wrote:

> foreach my $i (0..$#x) {
> foreach my $j (0..$#{$x[$i]}) {
> print $x[$i]->[$j], "\n";

Ville en dobbelt map-løkke være pænere her?

--
Thorbjørn Ravn Andersen "...plus... Tubular Bells!"
http://bigfoot.com/~thunderbear

Thomas Martin Widman~ (19-04-2001)
Kommentar
Fra : Thomas Martin Widman~


Dato : 19-04-01 22:08

Thorbjørn Ravn Andersen <thunderbear@bigfoot.com> writes:

> "Stig H. Jacobsen" wrote:
>
> > foreach my $i (0..$#x) {
> > foreach my $j (0..$#{$x[$i]}) {
> > print $x[$i]->[$j], "\n";
>
> Ville en dobbelt map-løkke være pænere her?

Mener du:

print map { map {"$_\n"} @$_ } @x;

???

Det ser da ikke specielt pænt ud, gør det?

/Thomas
--
Thomas Martin Widmann, Universitetsparken 8, 2., -333, DK-8000 Århus C
+45/702 84 406 viralbus@daimi.au.dk http://www.daimi.au.dk/~viralbus
MA stud. (ling-dat); stud.prog.; aktiv radikal; formand/DK-TUG; T4ONF/TK
Der stemmes om sci.lang.scandinavian (se CFV i news.announce.newgroups)!

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408943
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste