【问题标题】:Perl6 split function adding extra elements to arrayPerl6拆分函数向数组添加额外元素
【发布时间】:2017-09-04 03:54:10
【问题描述】:
my @r = split("", "hi");
say @r.elems;
--> output: 4

split 正在向数组中添加两个额外元素,一个在开头,另一个在结尾。

我必须在每次拆分后进行 shift 和 pop 来纠正这个问题。

有没有更好的分割字符串的方法?

【问题讨论】:

    标签: raku


    【解决方案1】:

    如果您在空字符串上进行拆分,您在返回列表的开头和结尾处获得一个空元素,因为在字符串之前和之后还有一个空字符串。

    你想要的是.comb,不带参数,功能完整地写出来:

    "hi".comb.elems.say;    # 2
    

    请参阅https://docs.raku.org/routine/comb#(Str)_routine_comb 了解更多信息。

    【讨论】:

      【解决方案2】:

      原因是当您使用空的 Str “” 作为分隔符时,它与您使用匹配字符旁边的正则表达式 /<|wb>/ 相同。所以它也在第一个字符之前和最后一个字符之后匹配。在这种情况下(并且仅在这种情况下),Perl 5 会为您删除这些“额外”字符串,这很可能是造成混淆的地方。

      相反,Perl 6 允许您显式地 :skip-empty

      'hi'.split('') :skip-empty
      'hi'.split('', :skip-empty)
      
      split("", "hi") :skip-empty
      split("", "hi", :skip-empty)
      

      或者指定你真正想要的东西

      'hi'.comb( /./ )
      'hi'.comb( 1 )
      'hi'.comb
      
      comb( /./, 'hi' )
      comb(   1, 'hi' )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多