如何在 Perl 6 中对散列进行排序
Posted YoungForPerl6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 Perl 6 中对散列进行排序相关的知识,希望对你有一定的参考价值。
要在 Perl 6 中对散列进行排序,首先你要知道什么是占位符变量。一旦这个概念变得清晰,对散列排序就变得非常简单。
例如,创建一个不同城市距离莫斯科远近的散列:
my %distance =
Владимир => 185,
Волгоград => 1000,
Калининград => 1227,
Мурманск => 1895,
Новосибирск => 3550;
现在的任务是通过比较距离来对散列进行排序。
say %distance.sort({$^a.value <=> $^b.value});
一般来说,它已经准备好了。该程序打印你需要的东西:
(Владимир => 185 Волгоград => 1000 Калининград => 1227 Архангельск => 1261 Астрахань => 1411 Мурманск => 1895 Новосибирск => 3550)
让我们看看传递给排序方法的块内发生了什么。
首先,变量 $^a
和 $^b
是占位符,它是匿名块的参数并按字母顺序排序。也就是说,以相同的方式,他们可以被称为 $^x
和 $^y
或 $^var1
和 $^var2
。
其次,这些占位符变量内部是 Pair
类型的对象,它包含键和值:
say %distance.sort({
say $^a.key ~ ', ' ~ $^a.value ~ ' vs. ' ~
$^b.key ~ ', ' ~ $^b.value;
$^a.value <=> $^b.value
});
通过这种方式,我们可以看到哪些 pair 对儿接收到排序方法:
Владимир, 185 vs. Новосибирск, 3550
Калининград, 1227 vs. Волгоград, 1000
Мурманск, 1895 vs. Астрахань, 1411
Владимир, 185 vs. Волгоград, 1000
Новосибирск, 3550 vs. Волгоград, 1000
Новосибирск, 3550 vs. Калининград, 1227
Астрахань, 1411 vs. Архангельск, 1261
Владимир, 185 vs. Архангельск, 1261
Волгоград, 1000 vs. Архангельск, 1261
Калининград, 1227 vs. Архангельск, 1261
Новосибирск, 3550 vs. Архангельск, 1261
Новосибирск, 3550 vs. Астрахань, 1411
Новосибирск, 3550 vs. Мурманск, 1895
如果您不想使用占位符,则可以显式声明匿名块的参数并在排序时使用它们:
say %distance.sort( -> $город1, $город2 {
$город1.value <=> $город2.value
});
以上是关于如何在 Perl 6 中对散列进行排序的主要内容,如果未能解决你的问题,请参考以下文章
使用 Perl 中对列表进行排序的索引对另一个列表进行排序和索引