由于工作需要,最近在学习Ruby,现在主要在看两本书《Ruby on Rail程序设计技术详解》和《Ruby of book》。毕竟是要在工作中运用,而且时间还有限,所以我在看书和做例子的同时也简单记录下了一些基本知识点,方便用的时候查找。有兴趣的朋友欢迎一起交流学习:
l 数组
1. 创建数组:
和其它很多编程语言一样,很容易创建一个数组,但要注意的是Ruby是一种弱类型的脚本语言,数组中各元素的类型可以互不相同,而且数组的长度可变:
arr = [“one”,”two”,”three”]
OR
arr = Array.new #an empty array
arr = Array.new(5) #[nil, nil, nil, nil, nil]
arr = Array.new(5,”hello”) #[”hello”, ”hello”, ”hello”, ”hello”, ”hello”]
当创建一个数组时,如果其元素为string类型且使用单引号,而你又不想老输入单引号,那么我们可以使用下面的方法来创建(使用%W来创建用双引号括起来的字符串):
arr = %w( this is an array of strings) #使用空格作为元素的分隔符
2.通过索引存取数组的值:
在Ruby中,数组索引可以是正整数(从前到后,从0开始)也可以是负整数(从后到前,从-1开始)还可以是范围(Range):
arr = ['h','e','l','l','o',' ','w','o','r','l','d']
print arr[0,5]
puts
print arr[0..4]
puts
print arr[0...4]
puts
print arr[-5,5]
--------Results--------
hello
hello
hell
world
Note: arr[-5,5]:前一个整数-5表示开始的索引,后面一个整数5表示数量
3..复制数组:
当使用”=”将一个数组变量赋值给另一个数组变量时,这两个数组变量引用的仍然是同一个数组,修改其中一个数组的值,另一个也会修改。我们可以使用Clone方法复制一个新数组:
arr = [‘one’,’two’,’three’,]
arr1= arr #arr和arr1引用的还是同一个数组,修改一个另一个也会修改
arr2=arr.clone #arr2是arr的一个新版本,修改arr2不影响arr
4..比较数组大小:
当使用 <=> 来比较两个数组a1和a2时,有三种情况:
1. a1 小于 a2, 返回 -1
2. a1 等于 a2, 返回 0
3. a1 大于 a2, 返回 1
那么,数组是如何比大小的呢?
当两个数组进行比较时,会把两个数组相同索引(从0开始)上的值拿来比较,如 [0,10,20]<=> [0,20,20], 则会返回-1,因为当索引为1时,10<20;
另外,如果比较的两个数组的元素是字符串,那么就比较它们的ASCII;如果一个数组比另一个长且其它元素都相同,那么数组长的‘大’。
然而,如果一个短数组里面的一个元素比另一个长数组里面的同位置的元素大,则认为短数组‘大’。
arr1=[1,2,3,4,5]
arr2=[1,2,3,4,5]
arr3=[1,2,3,4]
arr4=[1,2,3,5]
arr5=[1000,2000,3000]
arr6=[1,2]
arr7=[2,1]
arr8=["hello", "world"]
arr9=["Hello", "World"]
p(arr1<=>arr2) # 0
p(arr3<=>arr1) # -1
p(arr4<=>arr3) # 1
p(arr5<=>arr4) # 1
p(arr7<=>arr6) # 1
p(arr8<=>arr7) # nil
p(arr9<=>arr8) # -1
5.数组排序:
Sort方法使用比较操作符 <=> 来比较一个数组中邻近的元素的大小,但是这个不能比较一个数组中包含有nil的值的情况;
arr.sort{|a,b| a.to_s <=> b.to_s}
说明: 在这arr是一个数组对象,a和b代表相邻的两个元素。本方法使用了to_s方法把nil转换为一个空字符串,这样就可以对含有nil的数组进行排序了。此外,这个数组本身的值不会发生任何变在。
6.添加和删除数组元素:
向数组添加元素:
unshift:向数组头部添加数组元素
push: 向数组头部尾数组元素
<< : 向数组尾部添加一个数组元素
向数组删除元素:
shift: 从头部删除数组元素,并返回被删除的元素
pop: 从尾删除数组元素,并返回被删除的元素