码迷,mamicode.com
首页 > 其他好文 > 详细

Ruby Array

时间:2014-10-21 19:21:18      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   使用   for   strong   sp   div   

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

 

※ 带!的方法都会修改调用者,不带!的基本会返回一个新的对象

Ruby Array

标签:style   blog   color   ar   使用   for   strong   sp   div   

原文地址:http://www.cnblogs.com/voctrals/p/4037583.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!