在列表中§

请参阅主要文档 在上下文中 了解例程 roundrobin

sub roundrobin(+list-of-lists --> Seq)

从多个输入列表或其他 Iterable 构建“列表列表”,作为序列返回。roundrobin 返回与 zip 相同的结果,但允许输入列表具有不等数量的元素时除外。

say roundrobin <a b c>, <d e f>, <g h i>;
# OUTPUT: «((a d g) (b e h) (c f i))␤» 
 
say .join(","for roundrobin([12], [23], [34]);
# OUTPUT: «1,2,3␤2,3,4␤»

一旦一个或多个输入列表耗尽,roundrobin 不会终止,而是继续,直到所有列表中的所有元素都已处理。

say roundrobin <a b c>, <d e f m n o p>, <g h i j>;
# OUTPUT: «((a d g) (b e h) (c f i) (m j) (n) (o) (p))␤» 
 
say .join(","for roundrobin([12], [235777], [34102]);
# OUTPUT: «1,2,3␤2,3,4␤57,102␤77␤»

因此,在“压缩”操作中不会丢失任何数据值。但是,无法从结果序列中了解哪个输入列表提供了哪个元素。

roundrobin 可用于将混乱的数据组合到可以进行手动后处理步骤的程度。

sub roundrobin(+list-of-lists:$slip --> Seq)

从 Rakudo 编译器的 2022.02 版本开始,还可以指定 :slip 命名参数。如果指定为真值,将 滑动 生成的值。

say roundrobin <a b c>, <d e f m n o p>, <g h i j>:slip;
# OUTPUT: «(a d g b e h c f i m j n o p)␤»