Portál AbcLinuxu, 10. května 2025 16:06

Dotaz: Perl - Hashe, serazeni podle abecedy

8.3.2013 11:46 Petr
Perl - Hashe, serazeni podle abecedy
Přečteno: 330×
Odpovědět | Admin
Dobrý den,

prosím vás, neexistuje v perlu nějaký příkaz nebo funkce, která seřadí hodnoty v "hashi" abecedně podle klíčů? Tak, aby dvojice klíč-hodnota zůstala stejná.

Mám hashe, kde jako klíče jsou řetězce a hodnoty jsou čísla. Nejde o české řazení. Řazení podle hodnot v ASCII.

Děkuji předem za každou radu.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.3.2013 13:30 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Perl - Hashe, serazeni podle abecedy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Třeba takto:
use sort 'stable';
foreach (sort keys %values) {
	print $_, $values{$_}, "\n";

}
8.3.2013 14:30 luky
Rozbalit Rozbalit vše Re: Perl - Hashe, serazeni podle abecedy
u hashe stable neni nutny, protoze se hodnoty nemuzou opakovat a hash nema pevne poradi.
8.3.2013 15:07 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Perl - Hashe, serazeni podle abecedy
Pravda, díky za doplnění.
8.3.2013 17:06 Petr
Rozbalit Rozbalit vše Re: Perl - Hashe, serazeni podle abecedy
Děkuju za pomoc.
8.3.2013 18:06 Petr
Rozbalit Rozbalit vše Re: Perl - Hashe, serazeni podle abecedy
Ještě bych se rád zeptal, jak by měl správně vypadat regulární výraz, kterým projdou jen řetězce, které konč na !x nebo !y.

Mám ho napsaný takto: m/![xy]$/

Ale tím mi projde i např. řetězec "neco!sx"
8.3.2013 18:46 buff | skóre: 10 | blog: buff
Rozbalit Rozbalit vše Re: Perl - Hashe, serazeni podle abecedy
Regulární výraz máš podle mě dobře, mně se chová podle očekávání, tj. tento skript
if ("neco!sx" =~ m/![xy]$/) {
    say "Ano";
}
else {
    say "Ne";
}
vypíše "Ne".
8.3.2013 19:51 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Perl - Hashe, serazeni podle abecedy
regex je ok, viz buffova ukázka. Pro konkrétnější radu je potřeba více informací, např.: kód kolem regexu, vstup který se porovnává.
8.3.2013 20:40 Petr
Rozbalit Rozbalit vše Re: Perl - Hashe, serazeni podle abecedy
chci aby prošli jen nazvy souborů s příponou .x nebo .y (s tím vykřičníkem jsem to jen testoval)
8.3.2013 20:42 potato
Rozbalit Rozbalit vše Re: Perl - Hashe, serazeni podle abecedy
Tečka v regulárním výrazu znamená libovolný znak.
8.3.2013 20:46 Petr
Rozbalit Rozbalit vše Re: Perl - Hashe, serazeni podle abecedy

if ("neco.sx" =~ m/.[xy]$/) { print "Ano"; } else { print "Ne"; }

vypise ANO
8.3.2013 20:48 Petr
Rozbalit Rozbalit vše Re: Perl - Hashe, serazeni podle abecedy
Děkuju, už to mám "\."
8.3.2013 18:42 buff | skóre: 10 | blog: buff
Rozbalit Rozbalit vše Re: Perl - Hashe, serazeni podle abecedy
Odpovědět | | Sbalit | Link | Blokovat | Admin
viz perlfaq4

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.