免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2842 | 回复: 2
打印 上一主题 下一主题

Ruby学习笔记-Array [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-23 10:57 |只看该作者 |倒序浏览
  Ruby学习笔记-Array

 由于工作需要,最近在学习Ruby,现在主要在看两本书《Ruby on Rail程序设计技术详解》和《Ruby of book》。毕竟是要在工作中运用,而且时间还有限,所以我在看书和做例子的同时也简单记录下了一些基本知识点,方便用的时候查找。有兴趣的朋友欢迎一起交流学习:

l         数组

1.  创建数组:

  和其它很多编程语言一样,很容易创建一个数组,但要注意的是Ruby是一种弱类型的脚本语言,数组中各元素的类型可以互不相同,而且数组的长度可变:

  1. arr = [“one”,”two”,”three”]

  2. OR

  3. arr = Array.new                    #an empty array

  4. arr = Array.new(5)               #[nil, nil, nil, nil, nil]
  5. arr = Array.new(5,”hello”)    #[”hello”, ”hello”, ”hello”, ”hello”, ”hello”]

  6.        当创建一个数组时,如果其元素为string类型且使用单引号,而你又不想老输入单引号,那么我们可以使用下面的方法来创建(使用%W来创建用双引号括起来的字符串):

  7. arr = %w( this is an array of strings)    #使用空格作为元素的分隔符
复制代码
2.通过索引存取数组的值:
在Ruby中,数组索引可以是正整数(从前到后,从0开始)也可以是负整数(从后到前,从-1开始)还可以是范围(Range):
  1. arr = ['h','e','l','l','o',' ','w','o','r','l','d']

  2. print arr[0,5]

  3. puts

  4. print arr[0..4]

  5. puts

  6. print arr[0...4]

  7. puts

  8. print arr[-5,5]

  9. --------Results--------

  10. hello
  11. hello
  12. hell
  13. 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;如果一个数组比另一个长且其它元素都相同,那么数组长的‘大’。

然而,如果一个短数组里面的一个元素比另一个长数组里面的同位置的元素大,则认为短数组‘大’。

  1. arr1=[1,2,3,4,5]

  2. arr2=[1,2,3,4,5]

  3. arr3=[1,2,3,4]

  4. arr4=[1,2,3,5]

  5. arr5=[1000,2000,3000]

  6. arr6=[1,2]

  7. arr7=[2,1]

  8. arr8=["hello", "world"]

  9. arr9=["Hello", "World"]


  10. p(arr1<=>arr2)      #     0

  11. p(arr3<=>arr1)      #     -1

  12. p(arr4<=>arr3)      #     1

  13. p(arr5<=>arr4)      #     1

  14. p(arr7<=>arr6)      #     1

  15. p(arr8<=>arr7)      #     nil

  16. 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: 从尾删除数组元素,并返回被删除的元素

论坛徽章:
0
2 [报告]
发表于 2011-10-24 08:01 |只看该作者
你这个发重复帖了吧?三里屯摇滚已经发过了。

论坛徽章:
0
3 [报告]
发表于 2011-10-25 15:47 |只看该作者
谢谢分享,学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP