【问题标题】:ruby array split at Stringruby 数组在 String 处拆分
【发布时间】:2021-03-23 02:20:09
【问题描述】:

我有一个看起来像这样的数组...

array=["cab 3 > ", #<...>, #<...>, #<...>, "cab 2 > ", #<...>, #<...>, "cab 1 > ", #<...>]

我想在每个字符串上拆分它以获得这个...

array=[["cab 3 > ", #<...>, #<...>, #<...>], ["cab 2 > ", #<...>, #<...>], ["cab 1 > ", #<...>]]

我试过了......但无法弄清楚

array.group_by{|name| p name.split(/""/)} 
array.group_by{|name| p name.split(/\"\"/)} 
array.group_by{|name| p name.split(String)}

【问题讨论】:

    标签: arrays ruby split


    【解决方案1】:

    因此,您希望在每个 String 之前创建一个新的数组切片

    这可以使用Enumerable#slice_before 方法来实现:

    array.slice_before(String)
    

    这将返回您想要的形式的Enumerator。如果你绝对需要Array,那么你可以使用Enumerable#to_a 方法:

    array.slice_before(String).to_a
    #=> [["cab 3 > ", 1, 1, 1], ["cab 2 > ", 1, 1], ["cab 1 > ", 1]]
    

    【讨论】:

    • 第二个选项正是我所需要的......谢谢
    • 令我惊讶的是,您可以通过写r = /\Acab \d+ &gt; \z/; array.slice_before(r).to_a =&gt; [["cab 3 &gt; ", 1, 1, 1], ["cab 2 &gt; ", "cat", 1], ["cab 1 &gt; ", 1]] 来微调它。这是因为r === 1 #=&gt; false.
    猜你喜欢
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多