本文简要介绍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 Enumerable.slice_before用法及代码示例
- Ruby Enumerable.slice_when用法及代码示例
- Ruby Enumerable.sort用法及代码示例
- Ruby Enumerable.sort_by用法及代码示例
- Ruby Enumerable.sum用法及代码示例
- Ruby Enumerable.select用法及代码示例
- Ruby Enumerable.any?用法及代码示例
- Ruby Enumerable.uniq用法及代码示例
- Ruby Enumerable.find_all用法及代码示例
- Ruby Enumerable.max用法及代码示例
- Ruby Enumerable.map用法及代码示例
- Ruby Enumerable.min_by用法及代码示例
- Ruby Enumerable.find_index用法及代码示例
- Ruby Enumerable.minmax用法及代码示例
- Ruby Enumerable.drop用法及代码示例
- Ruby Enumerable.member?用法及代码示例
- Ruby Enumerable.each_cons用法及代码示例
- Ruby Enumerable.entries用法及代码示例
- Ruby Enumerable.flat_map用法及代码示例
- Ruby Enumerable.reject用法及代码示例
- Ruby Enumerable.each_with_index用法及代码示例
- Ruby Enumerable.filter_map用法及代码示例
- Ruby Enumerable.all?用法及代码示例
- Ruby Enumerable.take用法及代码示例
- Ruby Enumerable.reduce用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Enumerable.slice_after。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。