【发布时间】:2019-10-16 22:01:11
【问题描述】:
我想让用户可以更改数据结构中的排序顺序(asc / desc)。据我所知,这是通过更改代码中$a 和$b 的顺序完成的,但我想以编程方式更改它以避免冗余代码。
我做了一个工作示例:
use 5.018;
use warnings;
# Supply any argument to change sorting order
my $sorting_direction = $ARGV[0];
my $data = {
'item1' => {
'min' => 4,
'size' => 825,
'max' => 256,
},
'item2' => {
'min' => 4,
'size' => 130,
'max' => 65,
},
};
if (defined $sorting_direction) {
foreach my $item (sort { $$data{$a}{'size'} <=> $$data{$b}{'size'} } keys %{$data} ) {
say "$item\t", $$data{$item}{'size'};
}
} else {
foreach my $item (sort { $$data{$b}{'size'} <=> $$data{$a}{'size'} } keys %{$data} ) {
say "$item\t", $$data{$item}{'size'};
}
}
给出任何参数都会改变sorting_direction。我可以在没有 if 条件的情况下执行此操作吗?
【问题讨论】:
-
我对 Skeeve 的回答(因为它的简单性和有助于更好地理解排序机制)和 ikegami 的回答(可能更优雅,也指向一个不错的模块)都印象深刻。如果可以的话,我两个都接受!