Hallo,
ich habe eine Frage zu Perl - und zwar, ob und wenn ja wie es möglich ist,
aus einer Hash-Variable wie diese:
%ganzer_name = ("Fred" => "Feuerstein",
"Barney" => "Geroellheimer",
);
einen einen zufälligen Schlüssel auszuwählen und dann nach seinem Wert zu
fragen? Schön wäre es, wenn man da den Zufallsgenerator rand oder
ähnliches einbauen könnte.
Vielen Dank schonmal im voraus!
--
Daniel Feist
Am Sonntag, 16. Januar 2005 14:22 schrieb Daniel Feist:
%ganzer_name = ("Fred" => "Feuerstein", "Barney" => "Geroellheimer", );
# Schreibe die Schlüssel in ein Array my @vornamen = keys %ganzer_name; # Schreibe den Index des letzten Elements in einen Skalar my $last_element = $#vornamen; # Oder: Schreibe die Anzahl der Elemente in einen Skalar my $num_elements = @vornamen; # Jetzt kannst du den Zufallsgenerator einsetzen my $vorname = $vornamen[rand($num_elements)]; my $nachname = $ganzer_name{$vorname}; Lies dir mal die Manual-Page perlintro durch. Dort werden die die Grundlagen der Perl-Syntax kurz und knapp erklärt. Anschließend bietet sich das "perlreftut" an. Es erklärt den grundlegenden Umgang mit Referenzen. Gruß, Dennis -- Send personal mail to dennis@... only. Mails going to lists@stosberg.net will not reach me unless they are sent over the list.
Am Sonntag, 16. Januar 2005 13:22 schrieb Daniel Feist:
Hallo, ich habe eine Frage zu Perl - und zwar, ob und wenn ja wie es möglich ist, aus einer Hash-Variable wie diese: %ganzer_name = ("Fred" => "Feuerstein", "Barney" => "Geroellheimer", ); einen einen zufälligen Schlüssel auszuwählen und dann nach seinem Wert zu fragen?
Spontan würde ich vorschlagen, die Liste der Schlüssel in eine Liste zu schreiben, dann deren Länge (d.h. Anzahl der Elemente) zu bestimmen und dann eine Zufallszahl zwischen 0 und der Anzahl der Elemente zu erzeugen. Dann das Element $schluessel aus dem Schlüssel-Array mit Index $zufallszahl holen und aus %ganzer_name den Wert für $schluessel abfragen (das hier ist aus dem Perl Cookbook): #!/bin/perl -w %ganzer_name = ( "Fred" => "Feuerstein", "Barney" => "Geroellheimer", ); @schluessel = keys(%ganzer_name); $zufall = $schluessel[ rand @schluessel ]; $wert = $ganzer_name{$zufall}; print "$wert\n";
Schön wäre es, wenn man da den Zufallsgenerator rand oder ähnliches einbauen könnte. Vielen Dank schonmal im voraus!
Bitte schön... -- The nice thing about standards is that there are so many of them to choose from. -- Andrew S. Tanenbaum
--
Daniel Feist
Am Sonntag, 16. Januar 2005 13:22 schrieb Daniel Feist:
Hallo, ich habe eine Frage zu Perl - und zwar, ob und wenn ja wie es möglich ist, aus einer Hash-Variable wie diese: %ganzer_name = ("Fred" => "Feuerstein", "Barney" => "Geroellheimer", ); einen einen zufälligen Schlüssel auszuwählen und dann nach seinem Wert zu fragen?
Spontan würde ich vorschlagen, die Liste der Schlüssel in eine Liste zu schreiben, dann deren Länge (d.h. Anzahl der Elemente) zu bestimmen und dann eine Zufallszahl zwischen 0 und der Anzahl der Elemente zu erzeugen. Dann das Element $schluessel aus dem Schlüssel-Array mit Index $zufallszahl holen und aus %ganzer_name den Wert für $schluessel abfragen (das hier ist aus dem Perl Cookbook):
#!/bin/perl -w
%ganzer_name = ( "Fred" => "Feuerstein", "Barney" => "Geroellheimer", );
@schluessel = keys(%ganzer_name); $zufall = $schluessel[ rand @schluessel ];
$wert = $ganzer_name{$zufall};
print "$wert\n";
Schön wäre es, wenn man da den Zufallsgenerator rand oder ähnliches einbauen könnte. Vielen Dank schonmal im voraus!
Bitte schön...
Danke für deine Hilfe! ;) - eine Funktion, die den Schlüssel vorgibt und nach einem Wert fragt, der dann mit Regulären Ausdrücken überprüft wird, have ich jetzt! Ich verstehe nur noch nicht ganz wie ich folgendes hinbekomme: sub fuction { %hash = qw< Fred Feuerstein Wilma Geroellheimer Pebbles Steintal >; my $wert = $hash{$rand}; . .. ... } sub keys { # An dieser Stelle mit $wert weiterarbeiten? } Am besten wäre s, wenn ich der 2. Funktion die erste irgendwie "geben" könnte, also sprich mit deren Werten weiterarbeiten kann. Wie macht man das dann?
Hi Daniel! Daniel Feist schrieb am 16.01.2005 20:32 :
Am besten wäre s, wenn ich der 2. Funktion die erste irgendwie "geben" könnte, also sprich mit deren Werten weiterarbeiten kann. Wie macht man das dann?
Z.B. so: #!/usr/bin/perl -w use strict; use warnings; &main(); exit(0); sub main { my %hash = ( "Fred" => "Feuerstein", "Barney" => "Geroellheimer", ); for(my $i = 0; $i < 20; $i++) { print $i.": ".&getRandHashElement(\%hash)."\n"; } } sub getRandHashElement { my ($hash_ptr) = @_; my @hash_keys = keys(%$hash_ptr); my $rnd_key = $hash_keys[rand(@hash_keys)]; return $hash_ptr->{$rnd_key}; } hth, Michael
Am Sonntag, 16. Januar 2005 19:32 schrieb Daniel Feist:
my $wert = $hash{$rand}; . .. ... }
sub keys {
# An dieser Stelle mit $wert weiterarbeiten? } Am besten wäre s, wenn ich der 2. Funktion die erste irgendwie "geben" könnte, also sprich mit deren Werten weiterarbeiten kann. Wie macht man das dann?
Indem du der Subroutine "keys" die Variable "$wert" als Parameter übergibst; also mit "keys($wert)" aufrufst. Auf jeden Fall mal 'perldoc perlsub' lesen. Michael -- "I didn't know it was impossible when I did it."
participants (4)
-
Daniel Feist
-
Dennis Stosberg
-
Michael Armbrecht
-
Michael Wenger