Perl:如何制作最佳排名

时间:2013-05-31 01:31:07

标签: perl ranking perl-data-structures ranking-functions

我哥哥有以下几种商品ID和销售商品数量:

    $VAR1 = {
              'sold_times' => 4,
              'item_id' => 1,
            };

    $VAR2 = {
              'sold_times' => 1,
              'item_id' => 2,
            };
    ...

此信息来自阅读日志。在Perl中,此数据定义为:

    my @items_ids_sold_count_map = 
    map( { sold_times => $item_id_sold_count_map{$_}, item_id => $_,}, @items_ids);

其中:$ item_id_sold_count_map是一个哈希,而@items_ids是这种哈希的键。作为参考,哈希来自于读取日志文件,如前所述:

    open my $infile, "<", $file_location or die("$!: $file_location");
    while (<$infile>) {
        if (/item_id:(\d+)\s*,\s*sold/) {
            $item_id_sold_count_map{$1}++;
        }
    }
    close $infile;

我想在排名中提出这个问题。标准将是'sold_items',按降序排列。例如,我想到将它呈现在如下数据结构中:

    $VAR1 = { 'position' => 1, 'info' => { 'item_id' => 1, 'sold_items' => 4 },
              'position' => 2, 'info' => { 'item_id' => 2, 'sold_items' => 1 }, ... };

如何创建此数据结构?虽然我没有准确地寻找“最佳”方式,但大约有500,000个项目。

1 个答案:

答案 0 :(得分:1)

您似乎应该能够直接对数组进行排序,而无需添加额外的哈希值。类似的东西:

my @ranked = sort { $a->{sold_items} <=> $b->{sold_items} } @items_ids_sold_count_map;

这里的想法是比较每个元素的哈希字段以确定排序顺序。您可以将“a”和“b”切换为升序和降序排序。