Thread Probleme mit splice. Warum geht dat net??? (11 answers)
Opened by Alvin at 2008-01-12 17:22

topeg
 2008-01-12 20:23
#104650 #104650
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
oder:
Code (perl): (dl )
Innen: for my $i (reverse( 0 .. $#population)) {

"reverse" dreht die Liste um.

wenn du Interesse hast, dein Programm mal etwas anders geschrieben:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/perl
use strict;
use warnings;

#USAGE: ./alvin.pl 6 3

# die Ausgabe in einer eigenen Funktion
# dann schreibt man es nicht unnötig doppelt.
sub show_person
{
my $person=shift(@_);
my $age=$person->{age}; # Wert aus einer Hashreferenz lesen.
my $gender=$person->{gender};
my $weight=$person->{weight};
print "$age\t$gender\t$weight\n";
}

# $wert=(<bedingung>)?$a:$b ist gleich zu if(<bedingung>){$wert=$a}else{$wert=$b}
my $init_popsize = $ARGV[0] ? $ARGV[0] - 1 : 10 ; # wenn keine Angabe dann 10 annehmen
my $maxtime = $ARGV[1] ? $ARGV[1] : 10; # wenn keine angabe dann 10 Durchläufe machen

my @population;

for my $i (0..$init_popsize)
{
my $age=int( rand(10) );

my $gender=1; #Geschlecht (0=männlich, 1=weiblich)
$gender=0 if( rand(1) <= 0.4); # einen if-Zweig gespart.

my $random=rand(1);
my $weight=2;
if ( $random <= 0.3 )
{ $weight=0; }
elsif ( $random > 0.3 && $random <= 0.6 )
{ $weight=1; }

my %person=(age=>$age, gender=>$gender, weight=>$weight); # ein Hash der alle werte enthält
push(@population,\%person); # Referenz auf den Hash ans Array anhängen

show_person(\%person);
}
print "\n";

Aussen: for my $t ( 1 .. $maxtime )
{
print "\nTIME: $t\n";

Innen: for my $i (reverse( 0 .. $#population ))
{
my $person=$population[$i]; # referenz aus dem Array lesen
$person->{age}++;
splice( @population, $i, 1 ) if($person->{age} >= 10);
}

for my $person (@population) # hier kann man das array so durchlaufen lassen
{ show_person($person); }

print "population: ".@population."\n"; # im Skalarkontext gibt @array die Anzahl der enhaltenen Elemente zurück.
}


Alle Daten in einem Hash zu speichern mach das ganze doch übersichtlicher.

View full thread Probleme mit splice. Warum geht dat net???