替换数组内的元素
根据指定规则替换数组中的元素,Ruby也提供了以下方法:
ary.collect { |item| …}
ary.collect! { |item| …}
ary.map { |item| …}
ary.map! { |item| …}
将数组ary中的各元素item传递给块做处理。
1 | ary = [1, 2, 3] |
ary.fill(value)
ary.fill(value, begin)
ary.fill(value, begin, len)
ary.fill(vlaue, n..m)
将数组ary的元素替换为value。
1 | p [1, 2, 3].fill(0) #=> [0, 0, 0] |
*注意,此方法会修改原对象的值。即为破坏方法。
ary.flatten
ary.flatten
平坦化数组ary,所谓平坦化是指展开嵌套数组变为一个大数组。
1 | ary = [1, [2, 3], [4, [5, 6]]] |
ary.reverse
ary.reverse!
反转数组ary的元素顺序
1 | ary = [1, 2, 3] |
ary.sort
ary.sort!
ary.sort{|i, j| … }
ary.sort!{|i, j| …}
ary.sort_by {|i| …}
对数组ary中进行排序,排序方法可以由块指定。没有块时,使用*<=>*运算符比较。其中sort_by方法中排序是根据块的运行结果来对数组的所有元素进行排序。
1 | ary = [4, 9, 5] |
数组的迭代
each方法并不知道元素的索引值。当需要指定索引值时,可以使用each_with_index方法
1 | ary = [23, 54, 14] |
如果数组内各元素全部处理完毕后该数组就不需要了,此时可以通过逐个删除数组元素使数组变空这样的手段来实现循环。
1 | while item = ary.pop |
多维数组
数组中的各个元素也可以是数组,也就是数组的数组。可以用它来表示矩阵。
1 | ary = [[1, 2], [3, 4], [5, 6]] |
使用*Array.new(length, array)*创建二维数组。创建的所有元素引用的都是同一个对象array,修改其中一个元素的值,其他元素也会变化。如上示例代码。如何避免?可在创建数组的块中重复创建新对象。
ary.zip(ary1, ary2, …)
zip方法会将接收器和参数传来的数组元素逐一取出,而且每次都会启动块。参数可以是一个或多个。
1 | ary1 = [1, 2, 3] |