设为首页 加入收藏

TOP

Ruby数组(2):数组方法详细整理(四)
2019-08-15 00:10:23 】 浏览:519
Tags:Ruby 数组 方法 详细 整理
t;a", "b", "c", "d"] a.last(10) # ["a", "b", "c", "d"] [].first # nil [].first(2) # []


drop()和take()

drop(n) → new_ary
take(n) → new_ary

take()从数组头部返回前n个元素。

drop()从数组头部删除前n个元素,然后将剩下的元素作为新数组返回。

原数组不变。

# drop()
a = ["a", "b", "c"]
a.drop(2)    # 返回["c"],a不变

# take()
a = [1, 2, 3, 4, 5, 0]
a.take(3)    # [1, 2, 3]


drop_while()和take_while()

drop_while {|obj| block} → new_ary
drop_while → Enumerator

take_while {|obj| block} → new_ary
take_while → Enumerator

take_while()从数组头部开始迭代元素,直到遇到不满组语句块中条件的元素停止迭代,然后返回所有已迭代的满足条件的元素。

drop_while()从数组头部开始迭代元素,一直删除元素直到遇到不满足语句块中条件的元素停止迭代。然后将剩下的元素作为新数组返回。

注意,不是原处修改。

# drop_while()
arr = [1, 2, 3, 4, 5, 6]
new_arr = arr.drop_while {|a| a<4}
p new_arr   # [4, 5, 6]
p arr       # [1, 2, 3, 4, 5, 6]

# take_while()
a = [1, 2, 3, 4, 5, 0]
a.take_while {|i| i < 3}    #=> [1, 2]

fetch()

fetch(index) → obj
fetch(index, default) → obj
fetch(index) {|index| block} → obj

按照给定index获取数组中的元素。如果index越界,则根据三种不同形式进行处理:

  • 没有给第二个参数、没有使用语句块时,直接报错
  • 给了第二个参数时,index越界时将返回该第二个参数值作为默认值
  • 使用了语句块时,index越界时将执行语句块中内容,并将index传递给语句块变量
a = [ 11, 22, 33, 44 ]
a.fetch(1)               #=> 22
a.fetch(-1)              #=> 44
a.fetch(4, 'cat')        #=> "cat"
a.fetch(100) {|i| puts "#{i} is out of bounds"}
                         #=> "100 is out of bounds"

fill()

# 原处修改
fill(obj) → ary
fill(obj, start [, length]) → ary
fill(obj, range) → ary

fill {|index| block} → ary
fill(start [, length]) {|index| block} → ary
fill(range) {|index| block} → ary

前三种形式,据使用obj值替换数组中给定范围内元素的值:

  • fill(obj):使用obj替换所有元素
  • fill(obj, start [, len]):替换从start开始,长度len个元素,没有给len则替换后面所有元素
  • fill(obj, range):替换range所指定的范围元素

后三种形式,将传递数组索引到语句块,且给定范围内的元素将使用语句块的计算结果进行替换,范围之外的则保留使用索引值元素。

a = [ "a", "b", "c", "d" ]
a.fill("x")              # ["x", "x", "x", "x"]
a.fill("z", 2)           # ["x", "x", "z", "z"]
a.fill("y", 0..1)        # ["y", "y", "z", "z"]
a.fill {|i| i*i}         # [0, 1, 4, 9]
a.fill(-2) {|i| i*i*i}   # [0, 1, 8, 27]



pop()、push()和append()

push(obj, ...) → ary
append(obj, ...) → ary

pop → obj or nil
pop(n) → new_ary

注意原处修改。

  • push():将给定一个或多个元素追加到数组尾部,因为返回数组自身,所以可以链式追加
  • append():等价于push()
  • pop():从数组尾部移除并返回1个或n个元素(此时作为数组返回),如果数组为空则返回nil。等价于slice!(-n,n)
# push()、append()
a = [ "a", "b", "c" ]
a.push("d","e","f")     # %w[a b c d e f]
[1,2,3].push(4).push(5) # [1,2,3,4,5]
# pop()
a = [ "a", "b", "c", "d" ]
a.pop     # "d"
a.pop(2)  # ["b", "c"]
a         # ["a"]



shift()、unshift()和prepend()

unshift(obj, ...) → ary
prepend(obj, ...) → ary

shift → obj or nil
shift(n) → new_ary

注意原处修改。

  • unshift():向数组头部插入一个或多个元素,会导致整个数组原有元素后移
  • prepend():等价于unshift()
  • shift():从数组头部移除并返回1个或n个元素(此时以数组方式返回),会导致整个数组原有元素前移。如果数组为空则返回nil。等价于slice!(0,n)
# unshift、prepend()
a = [ "b", "c", "d" ]
a.unshift("a")   #=> ["a", "b", "c", "d"]
a.unshift(1, 2)  #=> [ 1, 2, "a", "b", "c", "d"]
# shif
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 4/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Ruby中to_s和to_str、to_i和to_in.. 下一篇Python之路【第四篇】:Python基础..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目