手册
array.fill(obj) → array
array.fill(obj, start [, length]) → array
array.fill(obj, range ) → array
array.fill {|index| block } → array
array.fill(start [, length] ) {|index| block } → array
array.fill(range) {|index| block } → array
前三个方法都是将obj填充到array里, start 默认为0, length默认为self.length长度
后三个方法是将block里的返回值填充到array里。block接收到的是array的元素index值。
实例代码
a = [ "a", "b", "c", "d" ]
a.fill("x") #=> ["x", "x", "x", "x"]
#将数组里所有元素替换为"x"
a.fill("z", 2, 2) #=> ["x", "x", "z", "z"]
#从数组第[2]位元素开始,替换 2 次 "z"
a.fill("y", 0..1) #=> ["y", "y", "z", "z"]
#将数组[0]到[1]位的元素替换为"y"
a.fill {|i| i*i} #=> [0, 1, 4, 9]
#提供block方法, i为数组下标
a.fill(-2) {|i| i*i*i} #=> ['a', 'b', 8, 27]
#从数组第[-2]位开始运行block
#注意,ruby源码里的注释是错的
#a.fill(-2) {|i| i*i*i} #=> [0, 1, 8, 27]
#实际应用, 我要生成一个数字从1到50的数组
>> Array.new(50).fill {|i| i+=1 }
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]