数组 即对象的有序集合 x = [1,2,3,4]
数组的索引从0开始,即 x[0] 为第一个元素1.
数组不需要设置预定义空间,或手工分配元素,叫我们可以创建空数组,如下所示:
x = []
x << "word" 我们就把word 字符串压入数组中,<< 是把数据放到数组末尾的运算符,也可以调用push方法。
数组的基本方法:
pop 出列,先进后出
push 进列
jion 将字符连接起来,形成一个大字符串
字符串切分成数组
split方法就是将字符串按照正则表达式将其分成数组,如:
puts “Short sentence. Another.NO more.”.split(/\.\/).inspect
irb(main):003:0> puts "short sentence. Another. no more.".split(/\./).inspect
["short sentence", " Another", " no more"]
=> nil
irb(main):004:0> puts "short sentence. Another. no more.".split(/\./)
short sentence
Another
no more
=> nil
正则表达式中.代表“任意字符”,因此在前面加反斜杠\,将其转义,inspect方法可以得到更紧凑的结果,如果
不调用的话,只能打印出切分的结果。
数组的迭代
数组中进行迭代的方法很简单,使用each方法即可。each方法遍历数组的每个元素,并把该元素当作参数,传递给
你提供的代码块。如:
[1,"test",2,3,4].each { |element| puts element.to_s + "X" }
irb(main):005:0> [1,"test",2,3,5].each {|element| puts element.to_s + "X" }
1X
testX
2X
3X
5X
=> [1, "test", 2, 3, 5]
collect 方法在数组中逐个元素地进行迭代,并用代码块中表达式的结果,对该元素进行赋值。在本例中,把元素
的值乘以2
[1,2,3,4].collect { |element| element*2}
irb(main):006:0> [1,2,3,4].collect {|element| element*2}
=> [2, 4, 6, 8]
数组的其他方法
数组加法和串连
如果有两个数组,我们可以快速合并为一个:
irb(main):007:0> x = [1,2,3]
=> [1, 2, 3]
irb(main):008:0> y = ["a","b","c"]
=> ["a", "b", "c"]
irb(main):010:0> z = x + y
=> [1, 2, 3, "a", "b", "c"]
数组的减法和区分
比较两个数组,方法是用一个数组减去另一个。这种方法结果是从主数组中删除两个数组中都有的元素:
如;
irb(main):011:0> x = [1,2,3,4,5]
=> [1, 2, 3, 4, 5]
irb(main):012:0> y = [1,2,3]
=> [1, 2, 3]
irb(main):013:0> z = x -y
=> [4, 5]
检查数组是否为空
可以用array.size 或array.length是否大于0的方法来检查,更流行的方法是empty?,如:
irb(main):014:0> x = []
=> []
irb(main):015:0> puts "x is empty" if x.empty?
x is empty
检查数组是否有某个元素
用include?方法,如果给定参数在数组中能找到则返回True,否则返回False:
irb(main):016:0> x = [1,2,3]
=> [1, 2, 3]
irb(main):017:0>
irb(main):018:0* puts x.include?("x")
false
=> nil
irb(main):019:0> puts x.include?("3")
false
=> nil
irb(main):020:0> puts x.include?(3)
true
=> nil
中间那行把3当成字符串,返回值就是false
访问数组中的第一个和最后一个元素
使用first和last 方法:
irb(main):021:0> x = [1,2,3]
=> [1, 2, 3]
irb(main):022:0> puts x.first
1
=> nil
irb(main):023:0> puts x.last
3
=> nil
如果对first或last方法指定数字n参数,则得到数组从开始或最末起的n个元素
irb(main):024:0> x = [1,2,3]
=> [1, 2, 3]
irb(main):026:0> puts x.first(2).join("-")
1-2
=> nil
反转数组元素的顺序
与字符串一样,数组也可以被反转,如下:
irb(main):027:0> x = [1,2,3]
=> [1, 2, 3]
irb(main):028:0> puts x.reverse.inspect
[3, 2, 1]
=> nil