Array.new #创建一个空数组
Array.new(5) #创建一个容量为5的数组,其元素的值为nil
Array.new(5, "0") #创建一个容量为5,值为"0"的数组
%w(字符串) #这个字符串不带"",ruby会对字符串的内容进行分析,去掉其中的空格,剩下的元素作为一个数组返回给调用者。
to_a,hash有一个to_a方法,其返回一个有键值对组成的数组的数组
split()方法,会去掉字符串中的空格,返回数组
split(",")方法,会去掉字符串中的逗号,返回数组
在index处插入几个元素
a[2, 0] = [12, 13] #在第三个元素后面,追加两个元素,12和13
获取多个index处的元素,组成新的数组
a.values_at(1, 2, 4) #获取第二个,第三个,第五个元素,组成数组
获取数组元素
a[n] #a.at(n) #a.slice(n)
a[n..m]和a[n...m] #a.slice(n..m),如果m的值大于数组的大小-1,那么等同于截取到最后一位
a[n, length] #a.slice(n, length)
a.unshift(item) 将item插入到a的首部
a<<item, a.push(item) 将item插入到a的尾部
a.concat(b) 把b的元素放到a数组的尾部,a会发生变化
a + b 返回一个新的数组,a和b都不会发生变化
删除a中的nil元素
a.compact 建立一个新的数组,并返回
a.compact! 去除掉a中的nil,并返回剩余的元素组成的数组,如果没有nil元素的话,返回结果为nil
a.delete(item) 从数组a中删除item元素
a.delete_at(index) 删除a中index位置的元素
按照条件删除
a.delete_if{|i| i>3} 破坏性的
a.reject{|i| i>3}
a.reject!{|i| i>3} 破坏性的
删除指定位置的元素
a.slice!(n)
a.slice!(n..m)
a.slice!(n, m)
去除重复元素
a.uniq()
a.uniq!() 破坏性的
替换元素
a.collect!{|item| item * 2} a中的元素会乘以2
a.collect{|item| item * 2} a中的元素都乘以2,并返回;a不变
a.map!{|item| item * 2} 等同于a.collect!{|item| item * 2}
a.map{|item| item * 2} 等同于a.collect{|item| item * 2}
a.fill(item) 将a中的元素全部替换为item
a.fill(item, index) 将a中,index开始后面的换位item
a.fill(item, index_bgn, length) 将a中,index_bgn开始后面的length个元素替换为item
a.fill(item, start_index..end_index) 将a中,start_index到end_index之间的元素替换为item
a.flatten! 将数组中的数组元素展开,形成一个数组,破坏性的
a.flatten 将数组中的数组元素展开,形成一个数组,返回一个新数组
a = [1, [3, 4], 5]
a.flatten #=> [1, 3, 4, 5]
a.reverse! 翻转a中的元素,a将发生变化
a.reverse 翻转a中的元素并返回数组,a不会发生变化
a.sort! 将a中的元素排序,a将发生变化
a.sort 将a中的元素排序并返回数组,a不会发生变化
集合
并集: arr_new = arr1 | arr2
交集: arr_new = arr1 & arr2
差集: arr_new = arr1 - arr2
合集: arr_new = arr1 + arr2
列表
破坏性的
a.unshif(item)
在首部追加item元素
a.push(item) 等同于a << item
在尾部追加item元素
a.pop
去除数组最后面的元素
a.shift
去除数组最前面的元素
a.contact(b)
把b追加到a数组中
非破坏性的
a.first
获得数组的第一个元素
a.lash
获得数组的最后一个元素
a + b
把数组b的元素和数组a的元素组成一个新数组并返回
处理数组元素
for, each, each_with_index
a = [1, [3, 4], 5] b = a.flatten for i in 0...b.length do print i+1, "th item is ", b[i],".\n" end print "------------------\n" b.each{|item| print item, "\n" } print "------------------\n" b.each_with_index{|item, i| print i+1, "th item is ", item,".\n" }
如果使用完数组之后,数组就没用了
a = [1, [3, 4], 5] b = a.flatten while item = b.pop do print item, "\n" p b end
Ruby支持2维数组
数组组成的数组
a = [[1, 2, 3],[4, 5, 6],[7, 8, 9]] p a[0] #[1, 2, 3] p a[0][1] #2
多维数组初始化
# WRONG a = Array.new(3, [0, 0, 0]) a[0][2] = 3 p a
#RIGHT a = Array.new(3){ [0, 0, 0] } a[0][2] = 3 p a
zip方法
当对多个具有相同元素个数的数组,按index进行处理,并返回一个新数组时:
arr1 = [1, 2, 3] arr2 = [10, 20, 30] arr3 = [100, 200, 300] i = 0 result = [] while i < arr1.length do result << arr1[i] + arr2[i] + arr3[i] i += 1 end p result
等同于
arr1 = [1, 2, 3] arr2 = [10, 20, 30] arr3 = [100, 200, 300] i = 0 result = [] arr1.zip(arr2, arr3){|a, b, c| result << a + b + c } p result
※ 带!的方法都会修改调用者,不带!的基本会返回一个新的对象