Ruby 数组

数组是有序的集合,可以包含任何数据类型的元素,包括数字、字符串、其他数组,甚至对象。

下面是一个简单的数组示例。你可以阅读本教程的其余部分以了解更多信息。

示例

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 也能获得类似输出,方法是使用 printp。例如:

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,依此类推。例如:

Accessing Array Elements
访问数组元素

示例

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 构造函数创建数组?

你也可以使用 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
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战