首先,请原谅我生锈的 Perl。我正在尝试修改 Bugzilla 的“whine.pl”以生成按严重性排序的错误列表。
所以它给了我一个哈希引用数组。每个哈希值都包含有关特定错误的大量信息(ID、受让人、严重性等)。我想按严重性对数组进行排序。最好的方法是什么?
我想出了几种可能性。一种是创建五个数组(每个严重性级别一个),然后循环该数组并将哈希引用推送到适当的严重性级别数组中。之后,我可以重新组装它们并用排序后的数组替换原始数组。
我的朋友提出的另一种方法是将严重级别(以文本形式存储在哈希中)分配给某些数字,并对它们进行 cmp。也许是这样的?
sub getVal {
my $entry = $_[0];
%lookup = ( "critical" => 0, ... );
return $lookup(entry("bug_severity"));
}
@sorted = sort { getVal($a) <=> getVal($b) } @unsorted;
为了避免不必要地多次调用 getVal,您可以使用“装饰、排序、取消装饰”。装饰是获取您真正关心的信息:
my @decorated = map { [ $_, getVal($_) ] } @unsorted;
然后对装饰列表进行排序:
my @sortedDecorate = sort { $a->[1] <=> $b->[1] } @decorated;
然后取回原始信息(未修饰):
my @sorted = map { $_->[0] } @sortedDecorate;
或者更类似于 Perl 的方式来做到这一点:
@sorted = map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [ $_, getVal($_) ] } @unsorted;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)