大佬教程收集整理的这篇文章主要介绍了我可以从地图中返回多个Pa对齐哈希吗?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
< H He > ==> map( { state $n = 0; $n++; $n => $_.Str,$_.Str => $n } ) ==> my %elements; %elements.perl.say; %elements{2}.what.say;
这给了我这个奇怪的事情:
{"1\tH H\t2" => $(2 => "He",:He(2))} (Any)
只有一对,没关系:
< H He > ==> map( { state $n = 0; $n++; $n => $_.Str } ) ==> my %elements; %elements.perl.say; %elements{2}.what.say;
现在我得到了我想要的东西,但没有反向对:
{"1" => "H","2" => "He"} (Str)
List
值,每个值包含两个
Pair
值.
有几种方法可以让它做你想要的:
使用平板
您可以使用内置的flat
函数来展平地图的结果,以便哈希接收一系列对:
<H He> ==> map { (state $n)++; +$n => ~$_,~$_ => +$n }\ ==> flat() ==> my %elements; %elements.say; # {1 => H,2 => He,H => 1,He => 2} %elements{2}.what.say; # (Str)@H_904_4@map和flat都返回延迟序列,因此即使元素列表很大,这(理论上)也是内存有效的.
>旁注:我还写了$n而不是$n,因为=>对构造运算符(如List构造运算符)不会“解包”其参数 – 如果给它一个项容器,如$变量,它将直接绑定到它而不是包含在其中的值,这会导致下一个$n也会影响从上一次迭代返回的Pair.为对象构造运算符赋予值表达式而不是变量,避免了这种情况.
使用滑动
slip
是平面的由内而外的版本:
<H He> ==> map { (state $n)++; slip +$n => ~$_,~$_ => +$n }\ ==> my %elements;
地图的每次迭代现在都返回一个类型为Slip
的值,它与List类似,只是它会自动溶解到它成为其中一部分的任何父列表中.
重构
如果您不依赖于您的特定方法,则有两种可能更清晰的方法来生成相同的哈希:
@H_869_2@my @keys = 1..*; my @values = <H He>; my %elements = flat (@keys Z=> @values),(@values Z=> @keys);要么:
@H_869_2@my %elements = 1..* Z=> <H He>; push %elements,%elements.invert;(Z
是“zip”元运算符)
以上是大佬教程为你收集整理的我可以从地图中返回多个Pa对齐哈希吗?全部内容,希望文章能够帮你解决我可以从地图中返回多个Pa对齐哈希吗?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。