Perl - 如何在哈希中获取前一个键?

dgB*_*gBP 1 perl hash loops key-value

我有一个哈希,其中填充了未知数量的字符串键.每个键的值为零以启动.

我想迭代这个哈希并为除第一个之外的每个元素,使其值等于我在另一个哈希中的等价物加上此哈希中的先前值.所以在数学上类似于:

hash1:a = hash2:a;
hash1:b = hash2:b + hash1:a;
hash1:c = hash2:c + hash1:b;
hash1:d = hash2:d + hash1:c;
hash1:e = hash2:e + hash1:d;
...
Run Code Online (Sandbox Code Playgroud)

我甚至不确定我知道如何做第一个,因为我不知道价值或关键是什么.我打算先对它进行排序,但由于键可能是列表中的任何键,我无法指定首先是什么.我不知道如何根据键引用以前的值.这可能吗?

(我没有任何代码表明我害怕,我试过但我只是意识到这是非常错的哈哈)

Mat*_*ton 5

哈希本身是无序的,因此他们不知道"先前"的密钥.您需要使用该keys函数提取密钥,对它们进行排序(如您所述),然后参考密钥列表的上一个元素,以找出您所选订单中的上一个密钥是什么.

获得之前的密钥后,您可以使用通常的$hash{$key}语法从哈希中访问该值.

然后诀窍就是访问列表中的前一个键,这可能需要通过索引迭代列表,因为foreach循环不会让您知道目前列表中的位置.就像是

for (my $i = 0; $i <= $#keys; ++$i) {
    if ($i == 0) { ... } # first key
    else { ... } # all other keys
}
Run Code Online (Sandbox Code Playgroud)

可能是合适的.

  • 大多数Perl程序员更喜欢`对于我的$ i(0 .. $#键)`而不是C风格的循环.(或者`foreach ...`,但`for`和`foreach`在Perl中是完全相同的,我更喜欢较短的拼写.) (2认同)