roundrobin
— 焉知非鱼roundrobin 在中文里意味着 「设置轮流捡取」。 roundrobin 用于构建 list of lists.
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,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([1, 2], [2, 3, 57, 77], [3, 4, 102]);
# OUTPUT: «1,2,3
# 2,3,4
# 57,102
# 77»
因此在 ‘zipping’ 操作过程中不会丢失任何数据值。但是,不能从结果序列中收集到哪个输入列表提供的哪个元素的记录。
roundrobin 在将混乱的数据组合到可以进行手动的后处理步骤时非常有用。
roundrobin 有一个非常有意思的例子:
怎么把
N-1
个分隔符插入到N
列中?
sub insert-separators-between-columns(@columns, @separators) {
roundrobin( @columns, @separators ).flat.join()
}
> insert-separators-between-columns(<a b c>, <, |>)
a,b|c
> insert-separators-between-columns(<a b c d>, <, | ,>)
a,b|c,d