如何在 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 6 中对形状数组进行切片?

需要帮助在 perl 中对数组进行排序

Perl中如何对数字进行排序

使用 Perl 中对列表进行排序的索引对另一个列表进行排序和索引

如果您可以在 7 次比较中对 5 个数字进行排序,那么如何在 10 次比较中对 6 个数字进行排序?

如何在 RecyclerView 中对字符串元素进行排序?