Ruby入門——數組


 1. 數組的定義

數組是許多指向對象的引用按順序排列的數據結構。

  數組中保存的是”指向對象的引用“,而不是對象本身。

2. 數組的創建

例1

a = 1
b = "str"

#數組不一定都是同一類型
c = [a, b, 3, "abcdef"]   #=> [1, "str", 3, "abcdef"]

#數組可以嵌套使用
d = [a, c, [1, 2, 3]]    #=> [1,[1, "str", 3, "abcdef"], [1, 2, 3]]

3. 數組的索引

數組的各個元素按順序被賦予了從0開始的編號,可使用這些編號和索引運算符[]對訪問對象進行操作。

例2

p c[0]
p c[1]
p c[2]
p c[3]
#如果訪問的索引值指向的元素不存在,則返回nil
p c[4] p d[2] #輸出結果 #1 #"str" #3 #"abcdef" #nil #[1, 2, 3]

負索引

負索引的存在,在Ruby中非常具有代表性。

Ruby中的數組對象的索引值是負數,是從末尾開始反向的編號所表示的元素。

數組的最后一個元素的編號是-1,在它前面的一個元素編號則是-2。

例3

p c[-1]
p c[-2]
#比最前面的元素還要前面,在數組范圍之外
p c[-5]


#輸出結果
#abcdef
#3
#nil

帶有長度的索引

例4

p c[1, 2]
p c[1, 3]
p c[1, 4]
#利用負索引進行訪問倒數兩個索引值指向的元素
p c[-2,2] #對范圍外進行訪問
p c[4,2] #輸出結果 #["str", 3] #["str", 3, "abcdef"] #["str", 3, "abcdef"] #[3, "abcdef"] #[]

表示范圍的索引

..表示包含末端的范圍

...表示不包含末端的范圍

例5

#包含末端的范圍
p c[0..1]
#不包含末端的范圍
p c[0...1]

p c[-2..-1]

#負索引組合,-2表示倒數編號,3表示正數編號
p c[-2..3]
p c[-2...3]
p c[4..5]

#輸出結果
[1, "str"]
[1]
[3, "abcdef"]
[3, "abcdef"]
[3]
[]

索引賦值

使用索引值可以對數組的內容進行替換。

例6

a = [1, 2]
p a
a[0] = 3
p a
#能夠對超過數組長度的位置進行賦值,此時數組會被自動延長,空白索引部分用nil填充
a[4] = "4"
p a
a[0, 3] = 'a', 'b', 'c'
p a

#當指定的元素個數比原數組的元素個數多時,數組會被加長並代入
a[0, 3] = 'a', 'b', 'c', 'd'
p a

a[1..2] = 1, 2
p a

a[0, 2] = "?"
p a

a[0..2] = "A"
p a

a[-1] = "Z"
p a

#輸出結果
#[1, 2]
#[3, 2]
#[3, 2, nil, nil, "4"]
#["a", "b", "c", nil, "4"]
#["a", "b", "c", "d", nil, "4"]
#["a", 1, 2, "d", nil, "4"]
#["?", 2, "d", nil, "4"]
#["A", nil, "4"]
#["A", nil, "Z"]

4. 數組的比較

例7

array1 = [1, 2, "str"]
array2 = [1, 2, "str"]
p array1 === array2   #=>true

array = ["str", 1, 2]
p array === [1, 2, "str", "extra"]   #=>false

5. 數組的各種各樣的方法

例8

array = ["a", "b", "c"]
#輸出數組的長度
p array.length
#輸出數組的元素個數(即長度)
p array.size
#array的元素copy
p array *=2
#是否包含c
p array.include? "c"
#對數組進行排序,生成新的數組,並不改變原來的array數組
p array.sort
p array
#消除重復元素,並不改變原來的array數組
p array.uniq
p array
#消除重復元素,並更新原來的array數組
array.uniq!
p array

#輸出結果
#3 #3 #["a", "b", "c", "a", "b", "c"] #true #["a", "a", "b", "b", "c", "c"] #["a", "b", "c", "a", "b", "c"] #["a", "b", "c"] #["a", "b", "c", "a", "b", "c"] #["a", "b", "c"]

6. 帶有代碼塊的方法和迭代

對帶有代碼塊的方法的調用進行編程時可以用do ... end 與 花括號{}。 do ... end 和花括號{}的區別僅僅在於結合強度而已。

數組對象擁有很多帶有代碼塊的方法,其中很多事對反復操作的抽象化,成為迭代方法。其中最具代表性的是each。

例9

array = ["a", "b", "c"]
array.each do |item|
	print item + ""
end

#輸出結果
#abc

7. 帶有序數的反復操作

each_with_index是each的一種變體,能夠同時獲取數組元素和其索引值

例10

array = ["a", "b", "c"]
array.each_with_index do |item, index|
	p [item, index]
end

#輸出結果
#["a", 0]
#["b", 1]
#["c", 2]

映射(Map)

例11-1

acids = ["Adenin", "Thymine", "Guanine", "Cytosine"]
sign = acids.map{|acid| acid[0, 1]}
p sign

#輸出結果
["A", "T", "G", "C"]

例11-2

acids = ["Adenin", "Thymine", "Guanine", "Cytosine"]
#對acids內的元素分別進行小寫轉為大寫,a為臨時變量
sign = acids.map{|a| a.upcase}
p sign

#輸出結果
#["ADENIN", "THYMINE", "GUANINE", "CYTOSINE"]

8. 排序

例12

array = ["73", "2", "5", "1999", "53"]
#按照默認的字符串排序
p array.sort

#轉化為數值后排序
p array.sort{|x,y| x.to_i <=> y.to_i}

#輸出結果
#["1999", "2", "5", "53", "73"]
#["2", "5", "53", "73", "1999"]

9. 選擇

將代碼塊中的返回值為真的元素取出,組成新的數組並返回

例:students.select{|person| person.grade == 3}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM