代码之家  ›  专栏  ›  技术社区  ›  chenyf

如何在列之间插入分隔符?

  •  5
  • chenyf  · 技术社区  · 6 年前

    我有专栏 @columns :

    my @columns =('column1', 'column2', 'column3');
    

    我有分离机 @separators :

    my @separators = (',', '|');
    

    我要在列之间逐个插入分隔符:

    column1,column2|column
    

    我的解决方案是:

    (@columns »~» (|@separators,"")).join("")
    

    这里有三列和两个分隔符,插入 N-1 分隔符 N 柱?

    3 回复  |  直到 6 年前
        1
  •  8
  •   Brad Gilbert    6 年前

    假设 @separators 具有正确数量的值,可以使用 roundrobin .

    roundrobin( @columns, @separators ).flat.join()
    
        2
  •  5
  •   Scimon Proctor    6 年前

    所以这对任何长度的 @columns @separators :

    首先我们使用 >>,>> 创建列表列表的超级运算符。

    (@columns >>,>> @separators)

    它给出:

    [("column1", ","), ("column2", "|"), ("column3", ",")]

    然后我们用一张纸条把它平铺成一张单子。

    (@columns >>,>> @separators).map( |* )

    它给出:

    ("column1", ",", "column2", "|", "column3", ",").Seq

    然后我们得到除最后一个值以外的所有值的数组:

    (@columns >>,>> @separators).map(|*).head(*-1)

    致:

    ("column1", ",", "column2", "|", "column3")

    最后一句话也没说:

    (@columns >>,>> @separators).map(|*).head(*-1).join("")

    最终结果:

    column1,column2|column3

    更改列或分隔符的数目不会有什么区别。

        3
  •  0
  •   chenyf    6 年前

    可能是另一种解决方案:

    my @columns =('column1', 'column2', 'column3');
    my @separators = (',', '|');
    sub sep { $^a ~@separators[$++] ~$^b};
    say [[&sep]] @columns;
    
    say [[&sep]] @columns; # but another call cause error
    
    
    Use of uninitialized value of type Any in string context.
    Methods .^name, .perl, .gist, or .say can be used to stringify it to something     meaningful.
    in sub sep at <unknown file> line 1
    in block <unit> at <unknown file> line 1
    
    Use of uninitialized value of type Any in string context.
    Methods .^name, .perl, .gist, or .say can be used to stringify it to something  meaningful.
    in sub sep at <unknown file> line 1
    in block <unit> at <unknown file> line 1
    
    column1column2column3
    
    推荐文章