Hash perl6哈希键<$/[0]><&引用$/[0]”&燃气轮机;和{quot;$/[0]}使值的行为不同
我有一个格式为Hash perl6哈希键<$/[0]><&引用$/[0]”&燃气轮机;和{quot;$/[0]}使值的行为不同,hash,key,quote,raku,Hash,Key,Quote,Raku,我有一个格式为type:amount的文件,我想把所有 将这些行放入一个散列,其键为类型,值为 金额的总和 然而,类型的引用方式似乎会影响 金额行为。有人能解释为什么会这样吗 以下是文件数据的内容: food : 100.01 gas : 50.02 food : 20.03 gas : 30.04 当使用%x构造键时,键似乎是 正确,但是这些值似乎被推送到了一个数组中,即使我 要添加以获取总金额: home/lisprog$ cat data | perl6 -ne '
type:amount
的文件,我想把所有
将这些行放入一个散列,其键为类型
,值为
金额的总和
然而,类型
的引用方式似乎会影响
金额
行为。有人能解释为什么会这样吗
以下是文件数据的内容:
food : 100.01
gas : 50.02
food : 20.03
gas : 30.04
当使用%x
构造键时,键似乎是
正确,但是这些值似乎被推送到了一个数组中,即使我
要添加以获取总金额:
home/lisprog$ cat data | perl6 -ne '
state %x //= {};
if $_ ~~ m/ \s* (\S+) \s* \: \s* (\d+\.\d+) \s* / {
if %x<$/[0]>:exists {
%x<$/[0]> += ($/[1].Numeric);
}
else {
%x.push: "$/[0]"=>($/[1].Numeric);
}
};
END { for %x.kv -> $m, $n { say "$m : $n"; } }' | sort
food : 100.01 20.03
gas : 50.02 30.04
那么,键是如何影响值的行为的呢?还是我问错问题了?我想你对
的功能有误解。它们基本上等同于单引号:
事实上,仔细想想,它实际上闻起来像是一种混音。将此作为练习留给读者:-)谢谢伊丽莎白·马蒂森!!我现在明白了。我的错误是认为它用插值进行双引号。通过哈希推送得到正确的密钥,我更难找到自己的误解。我会检查一下袋子,混音,布景等。谢谢!!!
cat data | perl6 -ne '
state %x //= {};
if $_ ~~ m/ \s* (\S+) \s* \: \s* (\d+\.\d+) \s* / {
if %x<"$/[0]">:exists {
%x<"$/[0]"> += ($/[1].Numeric);
}
else {
%x.push: "$/[0]"=>($/[1].Numeric);
}
};
END { for %x.kv -> $m, $n { say "$m : $n"; } }' | sort
food : 100.01 20.03
gas : 50.02 30.04
home/lisprog$ cat data | perl6 -ne '
state %x //= {};
if $_ ~~ m/ \s* (\S+) \s* \: \s* (\d+\.\d+) \s* / {
if %x{"$/[0]"}:exists {
%x{"$/[0]"} += ($/[1].Numeric);
}
else {
%x.push: "$/[0]"=>($/[1].Numeric);
}
};
END { for %x.kv -> $m, $n { say "$m : $n"; } }' | sort
food : 120.04
gas : 80.06
say <"foo"> # "foo"
$ cat data | perl6 -ne '
state %x;
%x{$0} += $1 if m/ \s* (\S+) \s* \: \s* (\d+\.\d+) \s* /;
END for %x.kv -> $m, $n { say "$m : $n" }' | sort