当前位置: 首页 > 知识库问答 >
问题:

Perl6:将列表中的元素与另一个列表中的元素匹配

齐琦
2023-03-14

我有一个数字列表L。还有另一个数字列表M。我需要返回一个在L和M中找到的数字列表L。

编辑:从数学上讲,我正在寻找多集交点。

例子:

L=3,1,4,1,5,92,6
M=9,7,121,1
L'=9,1,2,1

我为此编写了以下代码:

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为上述问题提供了一个特别令人满意的解决方案。至少对我的初学者来说:)

共有1个答案

东方旺
2023-03-14

你可以用袋子来做:

my $some-numbers = bag 3, 1, 4, 1, 5, 9, 2, 6;
my $to-match     = bag 9, 7, 1, 2, 1, 1;
my $matched      = $some-numbers ∩ $to-match;
say $matched;

输出:

bag(9, 1(2), 2)

您可以使用.kxxv将行李重新设置为阵列。

my @match-list = $matched.kxxv;
say @match-list;

输出:

[9 1 1 2]

(如果您不在乎复制品,请使用集合而不是袋子。)

 类似资料:
  • 问题内容: 给出以下列表: 我想将[a]的每个元素重复其在[b]中的对应位置的编号,以产生此结果: 即0发生1次,5发生2次,1发生1次。 问题答案: 内容如下: -重复elem次 从两个列表中组成一个2元组的列表,将每个元素与另一个列表中的对应元素配对。这为您提供了用例中需要传递给的确切信息。 -将迭代器的结果列表展平为单个值列表。您既可以像我一样,也可以像马丁·彼得斯那样。

  • 我想在java中创建一个方法,该方法接收两个字符串列表:

  • 问题内容: 我有两个看起来像的清单: 我要做的是将list1的所有那些元素都保留在list2中。结果应该是: 问题答案: 使用运算符,您可以检查元素是否在序列中。 使用列表理解: 但是效率不高。您最好转换为对象。

  • 问题内容: 我有两个带有不同对象的列表。 我想检查list2中的元素是否存在于list2中,基于特定的属性(Object1和Object2具有(以及其他),一个共有属性(类型为Long),名为attributeSame)。 现在,我这样做是这样的: 但是我认为有一种更好,更快的方法可以做到这一点:)有人可以提出吗? 谢谢! 问题答案: 如果只需要测试基本相等性,则可以使用基本JDK来完成,而无需在

  • 我有两个不同对象的列表。 我想根据特定的属性(Object1和Object2有一个共同的属性(类型为Long),名为AttributeName),检查list2中是否存在list1中的元素。 现在,我是这样做的: 但我认为有更好更快的方法可以做到这一点:)有人能提出吗? 谢谢

  • 问题:我希望编写一个脚本,同时循环两个列表,并将列表1中的日期替换为列表2中的日期。因此,很明显,您将使用清单2中的前70个日期替换清单1中的70个日期。之后,我希望将修改后的list1写入一个。txt文件。 我试过了,但我完全卡住了。我是Python的超级noob。