本文簡要介紹ruby語言中  Array類  的用法。
數組是有序的 integer-indexed 對象集合,稱為 elements 。任何對象都可以是 Array 元素。
數組索引
數組索引從 0 開始,就像在 C 或 Java 中一樣。
正索引是從第一個元素的偏移量:
- 
索引 0 表示第一個元素。 
- 
索引 1 表示第二個元素。 
- 
… 
負索引是從數組末尾向後的偏移量:
- 
索引 -1 表示最後一個元素。 
- 
索引 -2 表示next-to-last 元素。 
- 
… 
如果非負索引小於數組的大小,則為 in range。對於 3 元素數組:
- 
索引 0 到 2 在範圍內。 
- 
索引 3 超出範圍。 
如果其絕對值不大於數組的大小,則負索引為in range。對於 3 元素數組:
- 
索引 -1 到 -3 在範圍內。 
- 
索引 -4 超出範圍。 
創建數組
您可以使用以下命令顯式創建 Array 對象:
- 
一個 array literal 。 
您可以使用以下方法將某些對象轉換為數組:
- 
方法Array。 
一個數組可以包含不同類型的對象。例如,下麵的數組包含一個  Integer  、一個  String  和一個浮點數:
ary = [1, "two", 3.0] #=> [1, "two", 3.0]也可以通過使用零、一( Array  的初始大小)或兩個參數(初始大小和默認對象)調用  Array.new  來創建數組。
ary = Array.new    #=> []
Array.new(3)       #=> [nil, nil, nil]
Array.new(3, true) #=> [true, true, true]請注意,第二個參數使用對同一對象的引用填充數組。因此,僅在需要使用原生不可變對象(例如符號、數字、真或假)實例化數組的情況下才建議使用。
要創建具有單獨對象的數組,可以傳遞一個塊。此方法可以安全地用於可變對象,例如哈希、字符串或其他數組:
Array.new(4) {Hash.new}    #=> [{}, {}, {}, {}]
Array.new(4) {|i| i.to_s } #=> ["0", "1", "2", "3"]這也是構建多維數組的快速方法:
empty_table = Array.new(3) {Array.new(3)}
#=> [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]也可以使用由  Kernel  提供的 Array() 方法創建數組,該方法嘗試調用  to_ary  ,然後對其參數調用  to_a 。
Array({:a => "a", :b => "b"}) #=> [[:a, "a"], [:b, "b"]]示例用法
除了通過 Enumerable  模塊混合的方法之外, Array  類還具有用於訪問、搜索和以其他方式操作數組的專有方法。
一些更常見的如下所示。
訪問元素
可以使用 Array#[]  方法檢索數組中的元素。它可以采用單個整數參數(數字索引)、一對參數(開始和長度)或範圍。負索引從末尾開始計數,-1 是最後一個元素。
arr = [1, 2, 3, 4, 5, 6]
arr[2]    #=> 3
arr[100]  #=> nil
arr[-3]   #=> 4
arr[2, 3] #=> [3, 4, 5]
arr[1..4] #=> [2, 3, 4, 5]
arr[1..-3] #=> [2, 3, 4]訪問特定數組元素的另一種方法是使用  at  方法
arr.at(0) #=> 1要為數組邊界之外的索引引發錯誤,或者在發生這種情況時提供默認值,您可以使用  fetch  。
arr = ['a', 'b', 'c', 'd', 'e', 'f']
arr.fetch(100) #=> IndexError: index 100 outside of array bounds: -6...6
arr.fetch(100, "oops") #=> "oops"特殊方法 first  和 last  將分別返回數組的第一個和最後一個元素。
arr.first #=> 1
arr.last  #=> 6要返回數組的第一個 n 元素,請使用  take 
arr.take(3) #=> [1, 2, 3] drop  與  take  相反,通過在刪除 n 元素之後返回元素:
arr.drop(3) #=> [4, 5, 6]獲取有關  Array  的信息
數組始終跟蹤自己的長度。要查詢數組包含的元素數量,請使用  length  、  count  或  size  。
browsers = ['Chrome', 'Firefox', 'Safari', 'Opera', 'IE']
browsers.length #=> 5
browsers.count #=> 5檢查數組是否包含任何元素
browsers.empty? #=> false檢查特定項目是否包含在數組中
browsers.include?('Konqueror') #=> false向數組添加項
arr = [1, 2, 3, 4]
arr.push(5) #=> [1, 2, 3, 4, 5]
arr << 6    #=> [1, 2, 3, 4, 5, 6] unshift  將在數組的開頭添加一個新項目。
arr.unshift(0) #=> [0, 1, 2, 3, 4, 5, 6]使用 insert ,您可以在數組的任何位置添加新元素。
arr.insert(3, 'apple')  #=> [0, 1, 2, 'apple', 3, 4, 5, 6]使用  insert  方法,您還可以一次插入多個值:
arr.insert(3, 'orange', 'pear', 'grapefruit')
#=> [0, 1, 2, "orange", "pear", "grapefruit", "apple", 3, 4, 5, 6]從  Array  中刪除項目
方法  pop  刪除數組中的最後一個元素並返回它:
arr =  [1, 2, 3, 4, 5, 6]
arr.pop #=> 6
arr #=> [1, 2, 3, 4, 5]要檢索並同時刪除第一項,請使用  shift  :
arr.shift #=> 1
arr #=> [2, 3, 4, 5]要刪除特定索引處的元素:
arr.delete_at(2) #=> 4
arr #=> [2, 3, 5]要刪除數組中任意位置的特定元素,請使用  delete  :
arr = [1, 2, 2, 3]
arr.delete(2) #=> 2
arr #=> [1,3]如果您需要從數組中刪除 nil 值,一個有用的方法是  compact  :
arr = ['foo', 0, nil, 'bar', 7, 'baz', nil]
arr.compact  #=> ['foo', 0, 'bar', 7, 'baz']
arr          #=> ['foo', 0, nil, 'bar', 7, 'baz', nil]
arr.compact! #=> ['foo', 0, 'bar', 7, 'baz']
arr          #=> ['foo', 0, 'bar', 7, 'baz']另一個常見的需求是從數組中刪除重複元素。
arr = [2, 5, 6, 556, 6, 6, 8, 9, 0, 123, 556]
arr.uniq #=> [2, 5, 6, 556, 8, 9, 0, 123]遍曆數組
像所有包含 Enumerable  模塊的類一樣, Array  有一個 each 方法,它定義了應該迭代哪些元素以及如何迭代。在 Array 的  each  的情況下, Array  實例中的所有元素都按順序生成給提供的塊。
請注意,此操作使數組保持不變。
arr = [1, 2, 3, 4, 5]
arr.each {|a| print a -= 10, " "}
# prints: -9 -8 -7 -6 -5
#=> [1, 2, 3, 4, 5]另一個有時有用的迭代器是 reverse_each ,它將以相反的順序迭代數組中的元素。
words = %w[first second third fourth fifth sixth]
str = ""
words.reverse_each {|word| str += "#{word} "}
p str #=> "sixth fifth fourth third second first " map  方法可用於基於原始數組創建一個新數組,但其值由提供的塊修改:
arr.map {|a| 2*a}     #=> [2, 4, 6, 8, 10]
arr                   #=> [1, 2, 3, 4, 5]
arr.map! {|a| a**2}   #=> [1, 4, 9, 16, 25]
arr                   #=> [1, 4, 9, 16, 25]從  Array  中選擇項目
可以根據塊中定義的標準從數組中選擇元素。選擇可以以破壞性或非破壞性方式發生。雖然破壞性操作會修改調用它們的數組,但非破壞性方法通常會返回一個包含所選元素的新數組,但保持原始數組不變。
無損選擇
arr = [1, 2, 3, 4, 5, 6]
arr.select {|a| a > 3}       #=> [4, 5, 6]
arr.reject {|a| a < 3}       #=> [3, 4, 5, 6]
arr.drop_while {|a| a < 4}   #=> [4, 5, 6]
arr                          #=> [1, 2, 3, 4, 5, 6]破壞性選擇
 select! 和 reject! 是 select 和 reject 對應的破壞方法
與  select  與  reject  類似, delete_if  和  keep_if  在提供相同塊時具有完全相反的結果:
arr.delete_if {|a| a < 4}   #=> [4, 5, 6]
arr                         #=> [4, 5, 6]
arr = [1, 2, 3, 4, 5, 6]
arr.keep_if {|a| a < 4}   #=> [1, 2, 3]
arr                       #=> [1, 2, 3]相關用法
- Ruby Array.push用法及代碼示例
- Ruby Array.hash用法及代碼示例
- Ruby Array permutation()用法及代碼示例
- Ruby Array.to_a用法及代碼示例
- Ruby Array.to_h用法及代碼示例
- Ruby Array.to_s用法及代碼示例
- Ruby Array class fill()用法及代碼示例
- Ruby Array.array + other_array用法及代碼示例
- Ruby Array product()用法及代碼示例
- Ruby Array zip()用法及代碼示例
- Ruby Array concat()用法及代碼示例
- Ruby Array.take()用法及代碼示例
- Ruby Array.reject!用法及代碼示例
- Ruby Array.flatten!用法及代碼示例
- Ruby Array.reject用法及代碼示例
- Ruby Array compact!()用法及代碼示例
- Ruby Array reject!()用法及代碼示例
- Ruby Array.repeated_permutation()用法及代碼示例
- Ruby Array.index()用法及代碼示例
- Ruby Array.pack()用法及代碼示例
- Ruby Array.rassoc(obj)用法及代碼示例
- Ruby Array.values_at()用法及代碼示例
- Ruby Array repeated_combination()用法及代碼示例
- Ruby Array.each用法及代碼示例
- Ruby Array.fetch用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Array類。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
