娃娃鸭学Ruby-13、数组
数组
一个数组就是一系列的值,可以通过这些值在该序列中的位置或索引来访问它们。
Ruby中
数组的第一个值的索引为0
size和length方法返回一个数组的元素个数,
最后一个元素的索引是size-1
负索引从数组的末尾开始计数
-1 表示数组的最后一个元素,倒数第二个为-2
越界 返回nil,不抛出异常
Ruby数组是无类型且可变的
数组元素不必属于同一个类型,可随时改变
数组的大小可以动态改变 向数组添加元素,数组会按需增长
超出数组末尾的元素进行赋值,数组将会自动增长,用nil来填充多出的位置(超出数组开头的元素进行赋值 是错误的)
[1,2,3]
[-10..0,0..10,] # ranges
[[1,2],[3,4],[5]] # an array of nested arrays
[x+y,x-y,x*y] #元素也可是表达式
[] # 空数组 size=0
Ruby支持一种表达数组字面量的特殊语法。字面量的元素不包含空格的短字符串
words= %w[this is a test] # same as:['this','is','a','test']
open=%w|([{<| # same as :['(','[','{','<']
white=%W(\s \t \r \n) #same as : ["\s","\t","\r","\n"]
通过Array.new构造函数来创建数组
empty=Array.new #[]
nils=Array.new(3) #[nil,nil,nil]
zeros=Array.new(4,0) #[0,0,0,0]
copy=Array.new(nils) # make a new copy of an existing array
count=Array.new(3){|i|i+1} #[1,2,3]
a=[0,1,4,9,16]
a[0] # 0
a[-1] # 16
a[-2] # 9
a[a.size-1] # a[-1] 16
a[-a.size] # a[0]
a[8] #nil
a[-8] #nil
改变操作:
a[0]="zero" # a is ["zero",1,4,9,16]
a[-1]=1..16 # a is ["zero",1,4,9,1..16]
a[8]=64 # a is ["zero",1,4,9,1..16,nil,nil,nil,64]
a[-9]=81 # Error
索引
两种方式表示
1)利用两个整数,第一个表示起始索引,第二个表示被索引的元素个数
2)采用Rang对象
索引都返回指定的子数组
a=('a'..'e').to_a # Range 转换成数组['a','b','c','d','e']
a[0,0] # []
a[1,1] #['b']
a[-2,2] #['d','e']
a[0..2] #['a','b','c']
a[-2..-1] #['d','e']
a[0..-] #['a','b','c','d']
赋值操作
a[0,2]=['A','B'] # ['A','B','c','d','e']
a[2..5]=['C','D','E'] #['A','B','C','D','E']
a[0,0]=[1,2,3] #插入元素在a的位置
a[0..2]=[] #删除元素
a[-1,1] =['Z']
a[-1,1]='Z'
a[-2,2]=nil
操作
+
a=[1,2,3] +[4,5] #[1,2,3,4,5]
a=a+[[6,7,8]] # [1,2,3,4,5,[6,7,8]]
a=a+9 #Error
-
从数组中关掉另一数组中的元素,生成拷贝返回
['a','b','c','b','a']-['b','c','d'] #['a','a']
<<
a=[]
a<<1 # [1]
a<<2<<3 #[1,2,3]
a<<[4,5,6] #[1,2,3,[4,5,6]]
*
a=[0]*8 #[0,0,0,0,0,0,0,0]
| 并集 & 交集
a=[1,1,2,2,3,3,4]
b=[5,5,4,4,3,3,2]
a|b #[1,2,3,4,5] 重复元素删除
b|a #[5,4,3,2,1]
a&b #[2,3,4]
b&a #[4,3,2]
a=('A'..'Z').to_a #['A','B',....'Z']
a.each(|x| print x} #打印
其他方法
clear,compact!,delete_if,each_index,empty?,fill,flatten!,include?,index,join,pop,push,reverse,reverse_each,rindex,shift,sort,sort!,uniq!,unshift
2011-4-6 20:33 danny