我有一个数字列表L。还有另一个号码列表M。我需要返回一个列表L”在都大号和中号发现号。Perl6:匹配列表中的元素与另一个列表
编辑:数学,我找Multiset交集。
实施例:
大号 = 3,
1
,4,1
,5,9
,2
,6
中号 =9
,7,1
,2
,1
,1
L' = 9,1,2,1,
我写了following code:
my @some-numbers = 3, 1, 4, 1, 5, 9, 2, 6;
my @to-match = 9, 7, 1, 2, 1, 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。在我初学的眼睛至少:)
为什么'L''中有两个'1',而不是三个? –
在Perl5中,您可以执行'my%seen = map {$ _ => 1} @to_match;我的@match = grep {存在$见过{$ _}} @ some_numbers' –
对不起,在构思问题时不精确。我现在意识到我正在寻找的是[Multiset](https://en.wikipedia.org/wiki/Multiset)交集。我编辑了问题陈述以反映这一点。谢谢:) – Anant