在列表中§
请参阅主要文档 在上下文中 了解例程 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([1, 2], [2, 3], [3, 4]);# OUTPUT: «1,2,32,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([1, 2], [2, 3, 57, 77], [3, 4, 102]);# OUTPUT: «1,2,32,3,457,10277»
因此,在“压缩”操作中不会丢失任何数据值。但是,无法从结果序列中了解哪个输入列表提供了哪个元素。
roundrobin
可用于将混乱的数据组合到可以进行手动后处理步骤的程度。
sub roundrobin(+list-of-lists, : --> 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)»