【发布时间】:2020-09-13 18:29:17
【问题描述】:
我正在尝试将数字重新排列为非英文字母顺序。
my @numDE = < null eins zwei drei vier fünf sechs sieben acht neun >;
# english < zero one two three four five six seven eight nine >;
my %numrank; # The lookup hash: number => its_alphabetical_order
for @numDE.sort.kv -> $k,$v {%numrank{%(@numDE.kv.reverse){"$v"}} = "$k"};
my %temp; # number => reassigned order value
%temp{"$_"}= %numrank{"$_"} for "2378".comb; # 2378 sample input
say %temp.sort(*.values); # this prints:
# (8 => 0 3 => 1 7 => 7 2 => 9) it's in order but unformatted
my %target= %temp.sort(*.values); # Attempt to print it in order
for %target.kv -> $k,$v {print $k}; # that prints in random order
1- 如何按顺序打印%temp 哈希?
2- (可选)有没有办法开始使用散列变量而不用my 声明它,即像在 Python 中一样?
3-(可选)我选择了查找方法来解决这个问题,结果代码看起来有点复杂。是否可以使用任何其他方法缩短解决方案?
【问题讨论】:
-
快速评论:它尚不可用,但正在开展工作以提供本地化排序算法(最初在模块空间中,但很可能最终在核心中)。我一直很糟糕,没有完成准备工作,但我一直说我会做一些 samcv++ 可以集成到 moarVM 中的东西。
-
关于主题的更多信息,关于最终分配,您将分配回一个无序的哈希。
-
是的。这是试图以有序的形式打印数字,但因为我在上一节上花了一个多小时,所以我筋疲力尽,想不出更好的办法。