當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Ruby Enumerable.slice_after用法及代碼示例


本文簡要介紹ruby語言中 Enumerable.slice_after 的用法。

用法

slice_after(pattern) → enumerator
slice_after {|array| ... } → enumerator

使用參數 pattern ,返回一個枚舉器,該枚舉器使用該模式將元素劃分為數組 (“slices”)。如果 element === pattern ,則元素結束當前切片:

a = %w[foo bar fop for baz fob fog bam foy]
e = a.slice_after(/ba/) # => #<Enumerator: ...>
e.each {|array| p array }

輸出:

["foo", "bar"]
["fop", "for", "baz"]
["fob", "fog", "bam"]
["foy"]

使用塊,返回一個枚舉器,該枚舉器使用塊將元素劃分為數組。如果元素的塊返回值是真值,則元素結束當前切片:

e = (1..20).slice_after {|i| i % 4 == 2 } # => #<Enumerator: ...>
e.each {|array| p array }

輸出:

[1, 2]
[3, 4, 5, 6]
[7, 8, 9, 10]
[11, 12, 13, 14]
[15, 16, 17, 18]
[19, 20]

Enumerator 類和 Enumerable 模塊的其他方法,如map等,也可以使用。

例如,續行(以反斜杠結尾的行)可以如下連接:

lines = ["foo\n", "bar\\\n", "baz\n", "\n", "qux\n"]
e = lines.slice_after(/(?<!\\)\n\z/)
p e.to_a
#=> [["foo\n"], ["bar\\\n", "baz\n"], ["\n"], ["qux\n"]]
p e.map {|ll| ll[0...-1].map {|l| l.sub(/\\\n\z/, "") }.join + ll.last }
#=>["foo\n", "barbaz\n", "\n", "qux\n"]

相關用法


注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Enumerable.slice_after。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。