Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/400     02 Nov 2002  18:44:16
 To : Orlovsky Alexander
 Subject : Re: сортировка хэша
 -------------------------------------------------------------------------------- 
 
 Здравствуй, Orlovsky Alexander.
 
 OA> Задрался я тут, может башка плохо варит или еще чего, но в общем вот есть
 OA> такой сырец: #!/usr/bin/perl #################### use strict; #my
 OA> $files; #@files = glob($cmd); my %Hcaps = ();
 
 OA> foreach my $fname (@ARGV) {
 OA>     print "Processing ". $fname . "\n";
 OA>     open (FILE, "< $fname") or print STDERR "Warning: can't open file
 OA> $fname";
 
 OA>     while(<FILE>) {
 OA>   <..cut...>
 OA>   здесь мы забиваем хэш
 
 OA>   $Hcaps{$VALUE}{$EMAIL}++;
 OA>   }
 OA>     }
 OA> }    
 OA>     for my $value (sort %Hcaps) {
 OA>   if ( exists $Hcaps{$value}{"some\@ema.il"} ) {
 OA>       print "$value (some\@ema.il): " . 
 OA>    $Hcaps{$value}{"some\@ema.il"} . "\n";
 OA>       }
 OA>   }   
 
 OA> делаю
 OA> ./proga  file.log
 OA> получаю:
 OA> Processing tnpp_out.log      
 OA> 01051338 (some\@ema.il): 1 
 OA> 01051461 (some\@ema.il): 1 
 OA> 01051484 (some\@ema.il): 7 
 OA> 01051578 (some\@ema.il): 10
 OA> 01051620 (some\@ema.il): 1 
 OA> 01051947 (some\@ema.il): 4 
 
 OA> Может все и правильно, но мне нужно отсортировать  по значениям
 OA> (10,7,4,1,1,1)... Что делать? Подскажите, плиз!...
 
 Hе трогая структуры (хотя она меня как-то сомневает...)
 
 my %temp_hash;
 for my $val (keys %Hcaps) {
   $temp_hash{"$value (some\@ema.il)"} = $Hcaps{$value}{"some\@ema.il"}
    if exists $Hcaps{$value}{"some\@ema.il"};
 }
 for my $key (sort { $temp_hash{$b} <=> $temp_hash{$a} } keys $temp_hash) {
   print $key.": ".$temp_hash{$key}."\n";
 }
 
 Если у тебя обязательно у каждого ключа есть значение для "some\@ema.il", а if
 exists у тебя только оттого, что ты не то сортируешь, то два цикла можно
 свести в один.
 
 -- 
 Artem Chuprina
 Communiware.net
 RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757
 --- ifmail v.2.15dev5
  * Origin: Leninsky 45 home network (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 сортировка хэша   Orlovsky Alexander   02 Nov 2002 18:07:52 
 Re: сортировка хэша   Artem Chuprina   02 Nov 2002 18:44:16 
Архивное /ru.perl/14454bee89b58.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional