我可以从地图中返回多个Pa对齐哈希吗?
发布时间:2020-12-15 22:07:02 所属栏目:大数据 来源:网络整理
导读:我正在尝试创建一个按键或值查找的哈希.要查找两种方式,我希望值为键(值为键). H He == map( { state $n = 0; $n++; $n = $_.Str,$_.Str = $n } ) == my %elements;%elements.perl.say;%elements{2}.WHAT.say; 这给了我这个奇怪的事情: {"1tH Ht2" = $(2
我正在尝试创建一个按键或值查找的哈希.要查找两种方式,我希望值为键(值为键).
< H He > ==> map( { state $n = 0; $n++; $n => $_.Str,$_.Str => $n } ) ==> my %elements; %elements.perl.say; %elements{2}.WHAT.say; 这给了我这个奇怪的事情: {"1tH Ht2" => $(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 值.
将其提供给哈希不会自动将其展平,并且每个List都成为哈希的键或值. 有几种方法可以让它做你想要的: 使用平板 您可以使用内置的 <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) map和flat都返回延迟序列,因此即使元素列表很大,这(理论上)也是内存有效的. >旁注:我还写了$n而不是$n,因为=>对构造运算符(如List构造运算符)不会“解包”其参数 – 如果给它一个项容器,如$变量,它将直接绑定到它而不是包含在其中的值,这会导致下一个$n也会影响从上一次迭代返回的Pair.为对象构造运算符赋予值表达式而不是变量,避免了这种情况. 使用滑动
<H He> ==> map { (state $n)++; slip +$n => ~$_,~$_ => +$n } ==> my %elements; 地图的每次迭代现在都返回一个类型为 重构 如果您不依赖于您的特定方法,则有两种可能更清晰的方法来生成相同的哈希: my @keys = 1..*; my @values = <H He>; my %elements = flat (@keys Z=> @values),(@values Z=> @keys); 要么: my %elements = 1..* Z=> <H He>; push %elements,%elements.invert; ( (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |