如何在 Perl 6 中合并两个 SetHashes?

How to make a union of two SetHashes in Perl 6?

给定两个 SetHash,其中一个或两个可以为空。我想将第二个 SetHash 的所有元素添加到第一个。

由于 union operator 的输出是 Set,我唯一(而且可能不是最好的)方法如下。

my SetHash $s1 = <a b c>.SetHash;
my SetHash $s2 = <c d e>.SetHash;
$s1 = ($s1 (|) $s2).SetHash; # SetHash(a b c d e)

UPD: 可能这更简单,但必须转换为 .keys 让我不舒服。

$s1{ $s2.keys } X= True; # SetHash(a b c d e)

我希望 Elizabeth Mattijsen 会阅读您的问题和我们的答案,然后发表评论或提供她自己的答案。与此同时,这是我最好的镜头:

my %s1 is SetHash = <a b c> ;
my %s2 is SetHash = <c d e> ;
%s1 = |%s1, |%s2 ; # SetHash(a b c d e)

Elizabeth 在 Rakudo 2017.11 编译器中为使用 % 标记声明的变量(即声明其主要性质为 Associative 的变量)实现了 is Set(和表兄弟)功能发布。

前缀 |,用在作为参数列表的表达式中,"flattens" 它的单个参数,如果所述单个参数是复合的(relevant doc 声称它必须是 CapturePairListMapHash):

say [ [1,2], [3,4]]; # [[1 2] [3 4]]
say [|[1,2], [3,4]]; # [1 2 [3 4]]
say [|1, 2, [3,4]];  # [1 2 [3 4]]