Perl6:将列表中的元素与另一个列表匹配
发布时间:2020-12-15 21:48:59 所属栏目:大数据 来源:网络整理
导读:我有一个数字列表L.还有另一个数字列表M.我需要返回L和M中的数字列表L’. 编辑:数学上,我正在寻找Multiset交叉口. 例: L = 3, 1 ,4,5, 9 , 2 ,6 M = 9 ,7,1 L’ = 9,1,2,1 我为此写了following code: my @some-numbers = 3,9,6;my @to-match = 9,1;my @ma
我有一个数字列表L.还有另一个数字列表M.我需要返回L和M中的数字列表L’.
编辑:数学上,我正在寻找Multiset交叉口. 例:
我为此写了following code: my @some-numbers = 3,9,6; my @to-match = 9,1; my @matched; my %histogram; for @some-numbers -> $n { %histogram{$n}++ }; for @to-match -> $n { next if not defined %histogram{$n}; if %histogram{$n} > 0 { push @matched,$n; %histogram{$n}--; } }; say @matched; 虽然它达到了目的,但我想知道是否有一种惯用的Perl6方式吗? 一些背景:我一直在尝试一起学习Perl6和Python,并在两种语言中解决相同的难题. Python为上述问题提供了特别的pleasing solution.至少对我的初学者来说:) 解决方法
根据您正在寻找的精确语义,Bag操作可能只是票证:
my L = 3,6; my M = 9,1; .put with L.Bag ∩ M.Bag; 显示: 9 1(2) 2 这是包含三个键’9′,’1’和’2’的Bag的字符串化,其各自的值(重复计数)是整数1,2和1. 要让Perl 6从包中生成一个列表,每个键重复其关联值指示的次数,请使用.kxxv方法: .kxxv.put with L.Bag ∩ M.Bag; 显示: 9 1 1 2 (kxxv方法的助记符是它的k为“key”,然后xx与 但也许一袋不会.例如,结果中元素的顺序可能很重要 – 你需要9 1 2 1而不是9 1 1 2?如果包包不是正确的方法,我会延长这个答案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |