介紹
一個陣列是一種表示數值列表的資料結構,被稱為元素。陣列讓你可以將多個數值存儲在一個變量中。在 Ruby 中,陣列可以包含任何數據類型,包括數字、字符串和其他 Ruby 對象。這可以壓縮和組織你的代碼,使其更易讀和維護。所有的陣列都是具有自己方法的對象,你可以調用這些方法,提供了一種標準化的方法來處理數據集。
在這個教程中,你將創建陣列,訪問它們包含的值,在陣列中添加、修改和刪除元素,並遍歷陣列中的元素以解決更複雜的問題。
創建一個陣列
首先,讓我們詳細介紹如何創建陣列。舉個例子,這裡是各種鯊魚品種的列表。如果沒有陣列,你可能會將它們存儲在各個單獨的變量中:
shark1 = "Hammerhead"
shark2 = "Great White"
shark3 = "Tiger"
這種方法冗長,很快就會變得難以維護,因為它不夠靈活。添加另一個鯊魚意味著你需要添加並跟蹤一個額外的變量。
如果使用陣列,你可以簡化這個數據。要在 Ruby 程序中創建陣列,使用方括號([]
),並用逗號分隔你想要存儲的值:
sharks = ["Hammerhead", "Great White", "Tiger"]
而不是創建三個單獨的變量,現在您有一個包含所有三條鯊魚的變量。在這個例子中,您使用方括號[]
創建了一個數組,並用逗號分隔每個項目。如果您需要添加另一條鯊魚,您將向數組添加另一條鯊魚,而不是創建和管理新的變量。
您可以使用print
語句打印整個數組,這將顯示數組的內容:
print sharks
Output["Hammerhead", "Great White", "Tiger"]
如果您想創建一個數組,其中每個項目都是單詞,您可以使用%w{}
語法,這創建了一個詞數組:
days = %w{Monday Tuesday Wednesday Thursday Friday Saturday Sunday}
這相當於使用方括號創建數組:
days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
但請注意,%w{}
方法允許您跳過引號和逗號。
數組通常用於將類似數據類型的列表分組在一起,但在Ruby中,數組可以包含任何值或各種值的混合。這包括其他數組。這是一個包含字符串、nil
值、整數和字符串數組的示例:
record = [
"Sammy",
null,
7,
[
"another",
"array",
]
]
現在您將看看如何訪問存儲在數組中的數據。
訪問數組中的項目
為了訪問特定項目或陣列的元素,您引用其索引或在陣列中的位置。在Ruby中,索引從零開始。為了檢索您的sharks
陣列中的第一個元素,您需要將元素的索引附加到變數中,並使用方括號:
sharks = ["Hammerhead", "Great White", "Tiger"]
sharks
陣列有三個元素。以下是sharks
陣列中每個元素的索引方式:
Hammerhead | Great White | Tiger |
---|---|---|
0 | 1 | 2 |
陣列中的第一個元素是Hammerhead
,其索引為0
。最後一個元素是Tiger
,其索引為2
。索引從0
開始計數,這與從1開始計數的自然直覺相反,請記住直到變得自然為止。
注意:將索引視為偏移量可能有助於您,這意味著它距離陣列的開頭有多遠。第一個元素在開始位置,因此其偏移量或索引為0
。第二個元素距離陣列的第一個項目只有一個位置,因此其偏移量或索引為1
。
您可以使用length
方法查看陣列中有多少元素:
sharks.length
Output3
儘管sharks
的索引從0
到2
,但length
屬性返回陣列中的元素數量,即3
。它根本不關心索引。
如果您想查找陣列中特定元素的索引號,例如Tiger
,請使用index()
方法:
print sharks.index("Tiger")
Output2
這將返回包含該文字的第一個元素的索引。如果找不到索引號,例如對於不存在的值,控制台將返回`nil`:
print sharks.index("Whale")
Outputnil
要在Ruby中獲取數組的最後一個元素,請使用索引`-1`:
print sharks[-1]
Output"Tiger"
Ruby還提供了`first`和`last`方法來獲取第一個和最後一個元素,而不使用索引:
puts sharks.first
puts sharks.last
Output"Hammerhead"
"Tiger"
嘗試訪問不存在的索引將返回`nil`:
sharks[10]
Outputnil
數組可以包含其他數組,這些被稱為`嵌套數組`。這是在程序中建模二維數據集的一種方法。這是一個嵌套數組的示例:
nested_array = [
[
"salmon",
"halibut",
],
[
"coral",
"reef",
]
]
為了訪問嵌套數組中的元素,您需要添加另一個索引號以對應內部數組。例如,要從這個嵌套數組中檢索值`coral`,您將使用以下語句:
print nested_array[1][0];
Outputcoral
在此示例中,您訪問了`nested_array`變量的位置為`1`的數組,它返回了數組`[“coral”, “reef”]`。然後,您訪問了該數組的位置`0`的元素,即`”coral”`。
現在您將看看如何將元素添加到數組中。
將元素添加到數組中
您的`sharks`數組中有三個元素,它們的索引範圍是從`0`到`2`:
sharks = ["Hammerhead", "Great White", "Tiger"]
有幾種方法可以添加新元素。您可以將值分配給下一個索引,而在這種情況下,它將是3
:
sharks[3] = "Whale";
print sharks
Output["Hammerhead", "Great White", "Tiger", "Whale"]
這種方法存在錯誤風險。如果您添加一個元素並意外跳過一個索引,它將在數組中創建一個nil
元素。
sharks[5] = "Sand";
print sharks;
Output["Hammerhead", "Great White", "Tiger", "Whale", nil, "Sand"]
嘗試訪問額外的數組元素將返回其值,該值將為nil
:
sharks[4]
Outputnil
查找數組中的下一個可用索引存在錯誤風險並且需要額外的時間。通過使用push
方法添加元素來避免錯誤,該方法將元素添加到數組的末尾:
sharks.push("Thresher")
print sharks
Output["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher"]
您也可以使用<<
語法而不是push
方法將元素添加到數組的末尾:
sharks << "Bullhead"
Output["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher", "Bullhead"]
要將元素添加到數組的開頭,請使用unshift()
方法:
sharks.unshift("Angel")
print sharks
Output["Angel", "Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher", "Bullhead"]
現在您知道如何添加元素了,接下來您將了解如何刪除它們。
從數組中刪除元素
要從數組中刪除特定元素,請使用delete
或delete_at
方法。在sharks
數組中,您之前創建了一個nil
數組元素。現在,您將其刪除。
首先,找到它在數組中的位置。您可以使用index
方法來做到這一點:
print sharks.index(nil)
Output4
然後使用delete_at
來刪除索引4
處的元素並打印數組:
sharks.delete_at(4)
print sharks
Output["Angel", "Hammerhead", "Great White", "Tiger", "Whale", "Thresher", "Bullhead"]
delete
方法會從陣列中刪除與您傳遞的值匹配的元素。使用它來從陣列中刪除Whale
:
sharks.delete("Whale")
print sharks;
Output["Angel", "Hammerhead", "Great White", "Tiger", "Thresher", "Bullhead"]
delete
方法將刪除您傳遞的值的所有出現次數,因此如果您的陣列包含重複的元素,它們都將被刪除。
pop
方法將從陣列中刪除最後一個元素:
sharks.pop
print sharks;
Output["Angel", "Hammerhead", "Great White", "Tiger", "Thresher"]
作為陣列的最後一個元素,Bullhead
已被刪除。為了刪除陣列的第一個元素,使用shift
方法:
sharks.shift
print sharks
Output["Hammerhead", "Great White", "Tiger", "Thresher"]
這次,Angel
從陣列的開頭被移除。
通過使用pop
和shift
,您可以從陣列的開頭和結尾刪除元素。在可能的情況下,優先使用pop
,因為陣列中其餘的項目保留其原始索引號。
delete_at
、pop
和shift
方法都會更改原始陣列並返回您刪除的元素:
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
deleted_at_element = sharks.delete_at(1)
popped_element = sharks.pop
puts "Deleted_at element: #{deleted_at_element}"
puts "Popped element: #{popped_element}"
puts "Remaining array: #{sharks}"
OutputDeleted_at element: Great White
Popped element: Whale
Remaining array: ["Hammerhead", "Tiger"]
現在您已經知道了從陣列中刪除元素的幾種方法。現在您將看看如何修改您已經擁有的元素。
修改現有陣列中的元素
要更新陣列中的元素,只需使用賦值運算符將新值分配給元素的索引,就像處理常規變量一樣。
給定一個新的鯊魚數組,其中"Hammerhead"
位於索引0
,你將用"Angel"
替換"Hammerhead"
:
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks[0] = "Angel"
print sharks;
Output["Angel", "Great White", "Tiger", "Whale"]
為確保更新正確的元素,你可以使用index
方法首先定位元素,就像你找到要刪除的元素一樣。
現在你將看看如何處理數組中的所有元素。
遍歷數組
Ruby提供了許多遍歷數組的方法,每種方法的使用取決於你想要執行的工作的性質。接下來,你將探討如何遍歷數組並顯示每個元素。
Ruby提供了for..in
語法:
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
for shark in sharks do
puts shark
end
對於sharks
數組中的每個元素,Ruby將該元素分配給本地變量shark
。然後,你可以使用puts
打印元素的值。
雖然你不太常見for..in
。Ruby數組是對象,它們提供了each
方法來處理元素。each
方法的工作方式類似於for..in
,但具有不同的語法:
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks.each do |shark|
puts shark
end
each
方法使用了在Ruby编程中经常见到的语法。它将一个Ruby块作为其参数。 块是一些稍后在方法上下文中执行的代码。在本例中,代码是puts shark
。 shark
关键字,用管道字符(|
)括起来,是代表块将访问的数组元素的局部变量。Ruby将元素分配给此变量,并执行块中的代码。each
方法对数组中的每个元素重复此过程:
OutputHammerhead
Great White
Tiger
Whale
当块只是单行时,你经常会看到Ruby开发人员用花括号替换do
和end
关键字,并将整个语句压缩成一行:
...
sharks.each {|shark| puts shark }
这会产生相同的结果,但使用更少的代码行。
each_with_index
方法以类似的方式工作,但它还允许您访问数组元素的索引。此程序使用each_with_index
打印每个元素的索引和值:
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks.each_with_index do |shark, index|
puts "The index is #{index}"
puts "The value is #{shark}"
end
对于数组中的每个元素,Ruby将元素分配给变量shark
,并将当前索引分配给index
变量。然后您可以在块中引用这两个变量。
OutputThe index is 0
The value is Hammerhead
The index is 1
The value is Great White
The index is 2
The value is Tiger
The index is 3
The value is Whale
在自己的程序中,您经常会迭代数组中的元素,例如当您需要在网站上显示来自数据库的项目时,或者当您从文件中读取行并处理其内容时。
結論
數組是 Ruby 程式設計中極為靈活和基本的部分。在本教程中,您創建了數組並訪問了單個元素。您還添加、刪除和修改了數組中的元素。最後,您探索了兩種迭代數組並顯示其內容的方法,這是一種常用的顯示數據的方法。
通過閱讀教程 了解 Ruby 中的其他數據類型 來了解更多有關 Ruby 中其他數據類型的信息。
Source:
https://www.digitalocean.com/community/tutorials/how-to-work-with-arrays-in-ruby