Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Perl: PERL + hash ongelma

mrkebab [24.11.2010 14:13:31]

#

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?

vehkis91 [24.11.2010 14:37:41]

#

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);

mrkebab [24.11.2010 16:08:29]

#

No niinpäs korvaankin!

Kiitos vehkis91

jlaire [24.11.2010 22:23:48]

#

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;

mrkebab [26.11.2010 11:54:39]

#

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.

Metabolix [26.11.2010 12:58:38]

#

%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";
}

mrkebab [26.11.2010 13:09:40]

#

Tuhannet kiitokset Metabolix!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta