数组是有序的集合,可以包含任何数据类型的元素,包括数字、字符串、其他数组,甚至对象。
下面是一个简单的数组示例。你可以阅读本教程的其余部分以了解更多信息。
示例
ages = [10, 12, 3, 40, 5]
puts ages.inspect
# Output
# [10, 12, 3, 40, 5]
在这里,ages
是一个表示不同年龄的数字数组。
创建数组
在 Ruby 中,你可以通过将元素列表括在方括号([]
)中来创建数组。
例如,要存储班级学生的姓名,你可以这样写:
student_names = ["Alice", "Bob", "Charlie"]
注意:你也可以使用 []
或 Array.new
创建一个空数组。例如:
student_names1 = []
student_names2 = Array.new
打印数组
你可以通过以下方式打印数组:
1. 使用 .inspect 方法。
.inspect
方法返回对象的字符串表示,即 Ruby 内部如何表示对象。例如:
student_names = ["Alice", "Bob", "Charlie"]
puts student_names.inspect
# Output: ["Alice", "Bob", "Charlie"]
如你所见,Ruby 内部将 student_names
数组表示为 ["Alice", "Bob", "Charlie"]
。
注意:你不使用 .inspect
也能获得类似输出,方法是使用 print
或 p
。例如:
print student_names
p student_names
但是,请记住以下几点:
print
不会在输出后添加换行符。p
不适合用于字符串插值。
2. 不使用 .inspect 直接使用 puts。
如果你想让每个元素都打印在新的一行上,可以在不使用 .inspect
的情况下使用 puts
。例如:
student_names = ["Alice", "Bob", "Charlie"]
puts student_names
输出
Alice Bob Charlie
访问数组元素
一旦创建了数组,你就可以通过索引访问其元素。
数组的索引从0开始,这意味着第一个元素位于索引0,第二个元素位于索引1,依此类推。例如:

示例
fruits = ["apple", "banana", "cherry"]
first_fruit = fruits[0]
second_fruit = fruits[1]
puts first_fruit
puts second_fruit
输出
apple banana
数组中的操作
你可以在数组上执行各种操作,例如添加、删除和修改其元素。
让我们详细看看每种操作。
向数组添加元素
你可以使用 push
方法向数组末尾添加一个或多个元素。例如:
fruits = ["apple", "banana", "cherry"]
# Add "orange" to the end of the array
fruits.push("orange")
puts fruits.inspect
输出
["apple", "banana", "cherry", "orange"]
你也可以使用分号运算符(<<
)向数组末尾添加一个或多个元素。例如:
fruits = ["apple", "banana", "cherry"]
fruits << "mango" << "pineapple"
puts fruits.inspect
输出
["apple", "banana", "cherry", "mango", "pineapple"]
从数组中删除元素
你可以使用 pop
方法从数组中删除最后一个元素。例如:
fruits = ["apple", "banana", "cherry"]
last = fruits.pop
puts fruits.inspect
puts last
输出
["apple", "banana"] cherry
如你所见,pop
方法会删除最后一个元素并返回它。然后我们将此返回值存储在 last 变量中。
修改数组中的元素
你可以通过为指定索引分配新值来修改数组中的元素。例如:
fruits = ["apple", "banana", "cherry"]
puts "Before changing, the second element is: #{fruits[1]}"
fruits[1] = "mango"
puts "After changing, the second element is: #{fruits[1]}"
输出
Before changing, the second element is banana After changing, the second element is mango
数组方法
还有许多其他数组方法可用于执行各种操作。这些方法总结在下表中
方法 | 描述 |
---|---|
concat |
连接两个或多个数组并返回结果。 |
join |
将数组转换为字符串,并用指定的分隔符分隔。 |
index |
返回第一个匹配元素的索引。 |
find / detect |
返回满足条件的第一个元素。 |
each |
为数组中的每个元素运行一个代码块。 |
include? |
检查数组是否包含特定元素。 |
sort |
就地排序数组(或使用 sort 来获取副本)。 |
slice |
选择数组的一部分并将其作为新数组返回。 |
slice! |
通过删除指定索引处的元素并返回它们来更改数组的内容。 |
insert |
在数组的特定索引处添加一个或多个元素。 |
示例:数组方法
让我们看一个例子,看看上面的一些方法是如何工作的。
array1 = [1, 2, 3]
array2 = [4, 5, 6]
# Use concat to merge array1 and array2
combined_array = array1.concat(array2)
puts "Combined Array: #{combined_array.inspect}"
# Use index to find the index of element 5 in combined_array
index = combined_array.index(5)
puts "Index of 5: #{index}"
# Use slice to get a portion of combined_array (elements from index 1 to 3)
sliced_array = combined_array.slice(1, 3)
puts "Sliced Array: #{sliced_array.inspect}"
# Use slice! to remove two elements starting from index 3
combined_array.slice!(3, 2)
puts "Array After Removing 4 and 5: #{combined_array.inspect}"
# Use insert to add elements 7, 8 at index 3
combined_array.insert(3, 7, 8)
puts "Array After Inserting 7 and 8: #{combined_array.inspect}"
输出
Combined Array: [1, 2, 3, 4, 5, 6] Index of 5: 4 Sliced Array: [2, 3, 4] Array After Removing 4 and 5: [1, 2, 3, 6] Array After Inserting 7 and 8: [1, 2, 3, 7, 8, 6]
常见问题
你也可以使用 Array.new
创建数组。例如:
1. 创建一个空数组。
empty_array = Array.new
2. 创建一个指定长度的数组。
# Creates an array with 5 empty slots
array_with_size = Array.new(5)
3. 使用默认值创建特定大小的数组
# Array with 4 elements
# Each element has 0 as a value
array_with_elements = Array.new(4,0)
4. 创建一个包含元素的数组。
arr = Array.new(4) { |i| [1, 2, 3, 4][i] }
Ruby 支持负索引,这使你可以从末尾访问元素
- -1 表示最后一个元素。
- -2 表示倒数第二个元素。
- 依此类推。
示例
fruits = ["apple", "banana", "cherry"]
puts fruits[-1] # Output: cherry
puts fruits[-2] # Output: banana
你可以使用 unshift
方法向数组的开头添加一个或多个元素。例如:
fruits = ["apple", "banana", "cherry"]
# Add "strawberry" to the beginning of the array
fruits.unshift("strawberry")
puts fruits.inspect
# Output: ["strawberry", "apple", "banana", "cherry"]
你可以使用 shift
方法删除数组的第一个元素。例如:
fruits = ["apple", "banana", "cherry"]
first = fruits.shift
puts fruits.inspect
puts first
输出
["banana", "cherry"] apple