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


Ruby Array.slice用法及代码示例


本文简要介绍ruby语言中 Array.slice 的用法。

用法

slice(index) → object or nil
slice(start, length) → object or nil
slice(range) → object or nil
slice(aseq) → object or nil
别名:[]

self 返回元素;不修改 self

当给定单个整数参数 index 时,返回偏移量 index 处的元素:

a = [:foo, 'bar', 2]
a[0] # => :foo
a[2] # => 2
a # => [:foo, "bar", 2]

如果 index 为负数,则相对于 self 的末尾计数:

a = [:foo, 'bar', 2]
a[-1] # => 2
a[-2] # => "bar"

如果 index 超出范围,则返回 nil

当给定两个整数参数 startlength 时,返回一个大小为 length 的新数组,其中包含从偏移量 start 开始的连续元素:

a = [:foo, 'bar', 2]
a[0, 2] # => [:foo, "bar"]
a[1, 2] # => ["bar", 2]

如果 start + length 大于 self.length ,则返回从偏移量 start 到末尾的所有元素:

a = [:foo, 'bar', 2]
a[0, 4] # => [:foo, "bar", 2]
a[1, 3] # => ["bar", 2]
a[2, 2] # => [2]

如果 start == self.sizelength >= 0 ,返回一个新的空数组。

如果 length 为负数,则返回 nil

当给出单个 Range 参数 range 时,将 range.min 视为上面的 start,将 range.size 视为上面的 length

a = [:foo, 'bar', 2]
a[0..1] # => [:foo, "bar"]
a[1..2] # => ["bar", 2]

特殊情况:如果 range.start == a.size ,则返回一个新的空数组。

如果range.end 为负数,则从末尾计算结束索引:

a = [:foo, 'bar', 2]
a[0..-1] # => [:foo, "bar", 2]
a[0..-2] # => [:foo, "bar"]
a[0..-3] # => [:foo]

如果range.start 为负数,则从末尾计算起始索引:

a = [:foo, 'bar', 2]
a[-1..2] # => [2]
a[-2..2] # => ["bar", 2]
a[-3..2] # => [:foo, "bar", 2]

如果 range.start 大于数组大小,则返回 nil

a = [:foo, 'bar', 2]
a[4..1] # => nil
a[4..0] # => nil
a[4..-1] # => nil

当给定单个 Enumerator::ArithmeticSequence 参数 aseq 时,返回与序列生成的索引相对应的元素的 Array

a = ['--', 'data1', '--', 'data2', '--', 'data3']
a[(1..).step(2)] # => ["data1", "data2", "data3"]

与范围切片不同,如果算术序列的开始或结束大于数组大小,则抛出 RangeError

a = ['--', 'data1', '--', 'data2', '--', 'data3']
a[(1..11).step(2)]
# RangeError (((1..11).step(2)) out of range)
a[(7..).step(2)]
# RangeError (((7..).step(2)) out of range)

如果给定一个参数,并且其类型不是列出的类型之一,则尝试将其转换为 Integer ,如果不可能,则引发:

a = [:foo, 'bar', 2]
# Raises TypeError (no implicit conversion of Symbol into Integer):
a[:foo]

Array#slice Array#[] 的别名。

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Array.slice。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。