ruby基础之数组(array)类

数组类

建立数组([]使用Array.new、使用%w)

 e.g. num = [1, 2, 3, 4]

        strs = ["a", "b", "c", "d"]

        a = Array.new  p a  #=>[]

        a = Array.new(5)   p a #=>[nil, nil, nil, nil, nil]

        a = Array.new(5, 0)  p a #=>[0, 0, 0, 0, 0]

       lang = %w(ruby perl python scheme pike rebol)  p  lang  #=>["ruby", "perl", "python", "scheme", "pick", "rebol"]

转化成数组(使用to_a方法、使用字符串split方法

e.g. color_table = {"black" => "#000000", "white" => "#ffffff"}   p  color_table.to_a   #=>[["black", "#000000"], ["white", "#ffffff"]]

      column = "a,b,c,d"   p column.split(/,/)   #=>["a", "b", "c", "d"]

获取元素(a[n]、 a[n..m]或a[n...m]、 a[n, len]

a[n]  // 这个不多介绍,负值的情况要注意一下,e.g. alpha = ["a", "b", "c", "d"]  p alpha[-1]  #=> "d"

a[n..m]  // 将数组的元素“a[n]” 至“a[m]” 之间的范围建立新的数组并返回

a[n...m]  // 将数组元素“a[n]” 至 “a[m-1]” 之间的元素建立新的数组并返回

a[n, len] // 从“a[n]”处开始获取len个元素,建立新的数组并返回

除了"[]"这个方法外,还有其他的:

  a.at(n)  // 等同于a[n]

  a.slice(n)  // 等同于a[n]

  a.slice(n..m)  // 等同于a[n..m]

  a.slice(n, len)  // 等同于a[n, len] 

注意:slice 和 slice! 作用是不一样的,slice!会删除掉指定的元素,而slice是获取指定元素

改写元素([]、 at、 slice

这些方法,不但能读取元素,还可以用来写入数组的元素

e.g. a[n] = "item" 

其他的不多举例了,自己去看一下,这个比较简单

插入元素(a[n,0]

a[n, 0] // 在索引n处,换掉0个元素,实际上就是在索引n处插入元素, e.g. alpha = ["a", "b", "c", "d", "e"]  alpha[2, 0] = ["X", "Y"]  p alpha  #=> ["a", "b", "X", "Y", "c", "d", "e"]

以多个索引建立新数组(values_at)

values_at // 指定多个索引,跳着取值,返回新数组。e.g. alpha = %w(a b c d e f)  p alpha.values_at(1, 3, 5)  #=>["b", "d", "f"]

作为集合的数组      

集合的运算是:交集(array = array1 & array2)、 并集(array = array1 | array2)、 补集(由于Array类没有‘全集’的概念,故,没有‘补集’,但是,将一个集合减去另一个集合,做‘差集’运算)

e.g.  ary1 = ["a", "b", "c"]  ary2 = ["b", "c", "d"]  

       p (ary1 & ary2) #=>["b", "c"]    

       p (ary1 | ary2)  #=>["a", "b", "c", "d"]

       p (ary1 - ary2)  #=>["a"]  // 数组ary2里所包含的元素“d” 因为在ary1里并没有,所以也不会留下。

注意:“|”与“+”的差异,当两个数组具有相同元素的时候,“+”返回的数组会出现相同的元素,而“|”则不会。

作为"列表"的数组

这种情况,常用到的方法有:

                  对前端操作                   对末端操作

加入元素         unshift                      push

取出元素           shift                        pop

读取元素           first                         last

以上方法中,pop和shift方法不仅会获取数组的元素,还会从数组里删除该元素。当不希望元素被删除时,我们应该使用first方法和last方法,这两个方法只是读取数据而已

e.g.  a = [1, 2, 3, 4, 5]

p a.first  #=> 1

p a.last   #=> 5

p a #=> [1, 2, 3, 4, 5]

数组的主要方法

a.unshift(item)   // 在数组a前方加入新的元素item

a << item   或者 a.push(item) // <<和push是相同的方法,可以在数组a后方加入新的元素item

a.concat(b) 或者 a + b  // 将数组a与数组b连接起来。但是concat是破坏性的方法,而“+”则会返回新的数组

 

 破坏性的方法

   e.g.   a = [1, 2, 3, 4]

           b = a

           p b.pop  #=> 4

           p b.pop  #=> 3

           p b.pop  #=> 2

           p a       #=> 1

           p b       #=>1

使用pop方法删除数据的时候,变量a所代表的数组元素被删除,由“1, 2, 3, 4”变为“1”,同时变量b所代表的数组元素也被删除。这是因为,在执行“b=a”的时候,并没有将a的内容拷贝给b,而是a和b都共同指向一个对象。

 从数组中删除数据

  a.compact  与 a.compact!  从数组a中删除nil元素。“compact” 会建立新的数组,而“compact!”会直接改写原来的数组。compact!方法在删除nil以后会返回对象a;但什么都没有删除的时候,会返回nil。

  a.delete(x) // 从数组a中删除元素x,返回的是被删除的元素。e.g. a = [1, 2, 3, 2, 1]  a.delete(2)  p a  #=> [1, 3, 1]

  a.delete_at(n) // 从数组a中删除索引n处的元素,返回的是被删除的元素。e.g. a = [1, 2, 3, 2, 1]  a.delete_at(2)  p a  #=> [1, 2, 2, 1]

由于时间的关系,还有很多方法没有介绍,大家可以去查找文档,有很多方法的,都很实用。

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2013-04-24 10:35  鞋带松了  阅读(508)  评论(0编辑  收藏  举报