loops - 是否有 Raku 函数/方法允许迭代排序的哈希数组并确定其最大值?

标签 loops if-statement hashmap raku

我目前正在使用一个散列数组,该数组已按其键和值排序。我已经成功地拆分了散列,这样我就可以分别获取键和值。我创建了一个循环函数,它遍历键和值数组。此外,我有一个最常见的数字变量,它跟踪散列值并理想地在它遍历循环并在最常见的数字变量中找到一个大于当前值的值时进行更新。 这是我的代码的样子:

my $MCNum = 0;
my @sorted_pairs = %counts{$word}.sort: *.kv;
loop (my $i = 0; $i < @sorted_pairs; $i++) {
            say "i: ", @sorted_pairs[$i].values;
            say "i+1 ",@sorted_pairs[$i+1].values;
        if @sorted_pairs[$i].values < @sorted_pairs[$i+1].values {
            $MCNum = @sorted_pairs[$i+1].values;
            $best_word = @sorted_pairs[$i+1].keys;
            say "MCNumber is: ", $MCNum;
        }  

当我运行程序时,它给出了这个输出:

Sorted Hash Array: [90's => 1 at => 1 dance => 1 did => 1 does => 1 doesn't => 1 don't => 1 droid => 1 dubwise => 1 feat => 1 hasn't => 1 if => 1 is => 5 letters => 1 life => 1 like => 1 man => 1 me => 5 monsterman => 1 my => 2 scenes => 1 sensation => 1 so => 3 song => 1 survives => 1 theme => 1 triangle => 1 weather => 1 would => 1 y'all => 1 you => 10 your => 1]
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (5)
i: (5)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (5)
i: (5)
i+1 (1)
i: (1)
i+1 (2)
i: (2)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (3)
i: (3)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (1)
i: (1)
i+1 (10)
i: (10)
i+1 (1)
i: (1)
i+1 ()

这让我感到困惑,因为我假设该值在遇到 1 时应该被跳过,但是当它遇到 2、5 和/或 10 时,应该更新最常见的数字变量值。相反,我注意到在运行该程序时,它要么从不更新(如代码所示),要么始终更新变量,而不管数字是小还是大。我错过了什么?

最佳答案

我想你想使用 valuekey在循环内而不是 valueskeys .后者返回列表,当你进行数字比较时 @sorted_pairs[$i].values < @sorted_pairs[$i+1].values您最终会比较这些列表的长度。

永远是一个。

你也可以这样做:

my $MCNum = 0;
my @sorted_pairs = %counts{$word}.sort.rotor(2 => -1).map(*.kv);
for my $a, $b ( @sorted_pairs ) {
    if $a.value < $b.value {
        $MCNum = $b.value;
        $best_word = $b.key;
        say "MCNumber is: ", $MCNum;
    }
}

rotor 将类似列表的内容拆分为子列表,如果您将循环跳跃长度设置为负数,它会跳回一个元素。

(1,2,3,4,5).rotor(2 => -1) ~~ ((1,2),(2,3),(3,4),(4,5))

一般来说,如果我在 Raku 中看到一个老式的 C 风格循环,我认为可以简化一些事情。 ;)

关于loops - 是否有 Raku 函数/方法允许迭代排序的哈希数组并确定其最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74201993/

相关文章:

xcode - Swift 中的 If else 语句

javascript - 为什么 if/else 语句后不使用分号?

java - 谁能解释一下 java 是如何设计 HashMap 的 hash() 函数的?

java - HashMap 和数组在查找时间复杂度上的区别

mysql - 通过循环遍历 MySQL 中特定表中的 ROWS 创建多个表

audio - 如何在循环外的循环中使用值?

php - 如何在不使用 foreach 结构的情况下组合数组值和单独的常量?

php - 构建第一个自定义 CMS,并被告知使用 Dreamweaver 和一个名为 Horizo​​ntal Looper 的插件

c - 如果在 for 循环中创建子进程的 if 语句中有 break,循环是否不再执行?

Laravel Eloquent get() 按主键 id 索引