我正在寻找一个更简单的解决方案.
我有一个带有相应后缀的前缀列表和一个根列表.
my @prefixes = 'A'..'E'; my @suffixes = 'a'..'e'; my @roots = 1,2;
我想做出所有可能的’单词’:A1a,B1b …… A2a …… E2e.
my @words; for @roots -> $r { for @prefixes.kv -> $i,$p { my $s = @suffixes[$i]; my $word = [~] $p,$r,$s; @words.push: $word; } } say @words; # [A1a B1b C1c D1d E1e A2a B2b C2c D2d E2e]
我想用zip或cross这样的东西可以更轻松地做到这一点,但无法弄清楚如何……
解决方法
还有几种方法可以编写它:
say @roots X[&join] (@prefixes Z @suffixes);
say @roots.map({ |(@prefixes Z @suffixes)».join($_) });
say @roots.map({ (@prefixes X~ $_) Z~ @suffixes }).flat;
say (|@prefixes xx *) Z~ (@roots X~ @suffixes);
my @formats = (@prefixes Z @suffixes).flat.map(* ~ '%s' ~ *); say @formats X[&sprintf] @roots;
(注意:这个以不同的顺序打印它们.)
say do for @roots -> $root { |do for (@prefixes Z @suffixes) -> [$prefix,$suffix] { $prefix ~ $root ~ $suffix } }