All*_*son 6 sorting perl bugzilla
首先,请原谅我生锈的Perl.我正在尝试修改Bugzilla的"whine.pl"以生成按严重性排序的错误列表.
所以它给了我一个哈希引用数组.每个哈希都包含一系列有关特定错误(id,受让人,严重性等)的信息.我想按严重程度对数组进行排序.最好的方法是什么?
我想出了几个可能性.一种是创建五个数组(每个严重级别一个),然后遍历数组并将哈希引用推送到适当的严重性级别数组.在此之后,我可以重新组装它们并用已排序的数组替换原始数组.
我的朋友提出的另一种方法是将严重性级别(存储为散列中的文本)分配给某些nubmers,然后cmp它们.也许是这样的?
sub getVal {
my $entry = $_[0];
%lookup = ( "critical" => 0, ... );
return $lookup(entry("bug_severity"));
}
@sorted = sort { getVal($a) <=> getVal($b) } @unsorted;
Run Code Online (Sandbox Code Playgroud)
为了避免多次调用getVal,可以使用"decorate,sort,undecorate".装饰正在获取您真正关心的信息:
my @decorated = map { [ $_, getVal($_) ] } @unsorted;
Run Code Online (Sandbox Code Playgroud)
然后对装饰列表进行排序:
my @sortedDecorate = sort { $a->[1] <=> $b->[1] } @decorated;
Run Code Online (Sandbox Code Playgroud)
然后返回原始信息(undecorate):
my @sorted = map { $_->[0] } @sortedDecorate;
Run Code Online (Sandbox Code Playgroud)
或者更多的Perl-ish方法:
@sorted = map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [ $_, getVal($_) ] } @unsorted;
Run Code Online (Sandbox Code Playgroud)
我喜欢你提出的解决方案:
my %sevs = (critical => 0, high => 1, ...);
my @sorted = sort { $sevs{$a->{bug_severity}} <=> $sevs{$b->{bug_severity}} } @unsorted
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7020 次 |
| 最近记录: |