Сортировки
Сортировка хэша:
%hash = (
'шляпа' => 'серая',
'водка' => 'горькая',
'вобла' => 'вкусная');
foreach $key(sort keys %hash){
print "$key => $hash{$key}\n"; #отсортирует в алфавитном порядке по значениям ключа
}
foreach $value(sort values %hash){
print "$value\n"; #сортировка по значению
}
Сортировка ключей по алфавиту ассоциированных значений:
foreach $key(sort {$hash{$a} cmp $hash{$b}} keys %hash){
print $key, " => ", $hash{$key},"\n";
}
Сортировка по длинне ассоциированных значений:
@massive = sort{length($hash{$a}) length($hash{$b})}
keys %hash;
foreach $key(@massive){
print $key, $hash{$key},"\n";
}
Пример из fido7.ru.perl:
>> Есть хеш массив (слово, частота), необходимо вывести в файл пары
>> (слово,частота) отсортированные по частоте. По ключю - просто, а вот
>> по значению затрудняюсь. Подскахите как проще сделать?
my %hash=('for'=>1000,'to'=>1500,'in'=>2000,'do'=>500);
foreach(sort {$hash{$a} $hash{$b}} keys %hash) {
print $_,'=',$hash{$_},"\n";
}
Как можно хеш положить в строку? Например проблема:
tnc> имеются логи http-gw. Плохость их
tnc> заключается в том, что на каждый запрос в логе появляется 4 строки,
tnc> совершенно не обязательно идущие подряд:
Создаешь хэш и держишь в нем те строчки, которые еще, грубо говоря,
не закрыты, а как закроешь - удаляй. Конечно, некий заметный кусок
файла в памяти будет присутствовать, но не полностью же.
Что-нибудь типа
while(<IN>) {
($key, $no, $data) = parse($_); # расковыряли строчку
$buf{$key}-<[$no] = $data; # запихнули в хэш в виде массива
next if $no > 3; # нумеруем, ессно с нуля
analyze($buf{$key}); # обработали
delete $buf{key}; # удалили
}
Слияние хешей выполняется как и слияние массивов:
%hash1 = (
'шляпа' => 'серая',
'водка' => 'горькая',
'вобла' => 'вкусная');
%hash2 = (
'штаны' => 'широкие',
'пиво' => 'темное',
'игрушка' => 'любимая');
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий