Hei.
En ole pahemmin hasheihin koskenut, mutta nyt yritin ja en pääse tästä eteenpäin.
Eli for silmukassa vien tavara hashiin:
%hash = ($stuff[$i]=>$current_speed); print $stuff[$i]; print "\n"; print $current_speed;
Eli tässä vien hashiin tavara ja olen tulostanut muuttujat ne ovat OK, joka kierroksella.
Nyt kun haluan tulostaa hashin läpi, niin saan aina vain viimeisen tiedon hashista. En muuta. tulostan myös hashin koon ja se sanoo =1 ?
Eli tässä yritän tulostaa hashin kaikki tiedot, mutta saan vain viimeisimmän, enkä muuta:
while ( my ($key, $value) = each(%hash) ) { print "$key : $value\n"; } # Tässä tulostan hashin koon, joka 1 print "size of hash: " . keys( %hash ) . ".\n";
Missä on vika?
Oliskohan ongelma siinä, että korvaat aina edellisen hashin uudella:
%hash = ($stuff[$i]=>$current_speed);
Eikös tuon hashin pitäisi olla taulukko tms, että sinne saisi enemmän dataa?
Edit:
vaikka näin: (en osaa yhtään perliä, eli saattaa olla ihan päin v:tä)
%hash[$i] = ($stuff[$i]=>$current_speed);
No niinpäs korvaankin!
Kiitos vehkis91
vehkis91 kirjoitti:
Edit:
vaikka näin: (en osaa yhtään perliä, eli saattaa olla ihan päin v:tä)%hash[$i] = ($stuff[$i]=>$current_speed);
Juuh, uusi arvo lisätään näin:
$hash{$stuff[$i]} = $current_speed;
Terve taas.
Nyt olisi sellainen kysymys, että miten saisin suoritettua seuraavan homman:
Minulla on kaksi hashia %hash ja %cash
Molemmissa on tietoa seuraavasti:
%hash = ('a'=>10, 'b'=>15, 'c'=>30); %cash = ('a'=>15, 'F'=>66, 'c'=>33);
Nyt minun pitäisi käydä yo. hashit lävitse ja laskea niiden erotus. Jos toisessa hashissa on key, joka ei löydy toisesta, niin sekin pitäisi saada talteen vaikkapa taulukkoon.
Onko mitään vinkkejä antaa.
%hash = ('a' => 1, 'b' => 2, 'c' => 4); %cash = ('a' => 1, 'c' => 8, 'd' => 16); # Odotettu tulos: # %x = ('a' => 0, 'b' => 2, 'c' => -4, 'd' => -16); %x = (); while (($key, $hv) = each %hash) { if (defined($cash{$key})) { $cv = $cash{$key}; $x{$key} = $hv - $cv; } else { $x{$key} = $hv - 0; } } while (($key, $cv) = each %cash) { if (defined($hash{$key})) { # Hoidettu jo } else { $x{$key} = 0 - $cv; } } while (($key, $hv) = each %x) { print "$key => $x{$key}\n"; }
Tuhannet kiitokset Metabolix!
Aihe on jo aika vanha, joten et voi enää vastata siihen.