当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。