Anstatt eine grep
nur Schleife über den Array und eine Zählvariable halten:
for my $idx(0 .. $#{ $arr{monsters} }) {
if ($arr{monsters}[$idx] eq 'Test2') {
print "Kills = $arr{kills}[$idx]\n";
last;
}
}
Ein besserer Weg, dies zu handhaben, jedoch könnte sein, Ihre Datenstruktur zu überdenken. Anstelle von parallelen Anordnungen, ein Array von Hashes betrachten:
my @monsters = ({ name => 'Test', kills => -1 }, { name => 'Test2', kills => -2 });
, nun ein bestimmtes Monster zu finden:
my ($monst) = grep { $_->{name} eq 'Test2' } @monsters;
print $monst->{kills};
Dies würde ermöglichen es Ihnen, die Suche nach Namen und ebenso leicht tötet. Wenn du immer nach dem Namen suchst, dann ist es vielleicht besser, einen Hash auf den Namen zu setzen und auf die Anzahl der Kills zu zeigen (wie es @dmah vorschlägt).
Ein noch besserer Weg, damit umzugehen, wäre es, deine Monster in einer Klasse zu verpacken und jedes Objekt über seine eigenen Tötungen im Auge zu behalten, aber ich überlasse das als Übung für das OP.
Wie würde ich das durchlaufen, um es zu drucken? Vergiss es, ich habe es verstanden: while (($ k, $ v) = jeder% arr) { print "$ k =>", $ arr {"$ k"} {"kills"}, "\ n" ; } – Zeno
Sicher oder so ähnlich: foreach (Sortierschlüssel% arr) {print "$ _ = $ arr {$ _} {'kills'} \ n"; } – dmah
Was ist mit Sortieren nach Kills? – Zeno