Ruby 数组(Array)

Ruby 中的数组(Array)是一种非常常见的数据结构,用于存储多个元素。与其他编程语言的数组相比,Ruby 的数组具有许多灵活的特性,比如可以存储不同类型的数据、动态调整大小等。


一、创建数组

  1. 使用 [] 创建数组arr = [1, 2, 3, 4, 5] puts arr 这行代码创建了一个包含 5 个整数的数组。
  2. 使用 Array.new 创建数组arr = Array.new(3) # 创建一个包含 3 个 `nil` 的数组 puts arr.inspect 你可以通过 Array.new 来创建一个指定大小的空数组,数组的每个元素默认是 nil使用自定义值初始化数组arr = Array.new(3, "hello") puts arr.inspect # ["hello", "hello", "hello"] 这行代码创建了一个包含 3 个 "hello" 字符串的数组。

二、访问数组元素

  1. 通过索引访问元素数组的索引从 0 开始,可以使用数组索引来访问特定的元素。arr = [10, 20, 30, 40, 50] puts arr[0] # 10 puts arr[2] # 30
  2. 负索引:使用负数索引从数组的末尾访问元素。arr[-1] 是数组的最后一个元素,arr[-2] 是倒数第二个元素,依此类推。arr = [10, 20, 30, 40, 50] puts arr[-1] # 50 puts arr[-2] # 40
  3. 通过范围访问元素可以使用范围操作符 .. 或 ... 获取数组的一个子数组。arr = [10, 20, 30, 40, 50] puts arr[1..3].inspect # [20, 30, 40] (包括 3) puts arr[1...3].inspect # [20, 30] (不包括 3)

三、常见的数组方法

  1. 添加元素
    • push 方法向数组的末尾添加元素:arr = [1, 2, 3] arr.push(4) # [1, 2, 3, 4]
    • << 操作符也可以用来添加元素:arr = [1, 2, 3] arr << 4 # [1, 2, 3, 4]
  2. 删除元素
    • pop 方法删除并返回数组的最后一个元素:arr = [1, 2, 3, 4] puts arr.pop # 4 puts arr.inspect # [1, 2, 3]
    • shift 方法删除并返回数组的第一个元素:arr = [1, 2, 3, 4] puts arr.shift # 1 puts arr.inspect # [2, 3, 4]
    • delete 方法删除指定值的元素:arr = [1, 2, 3, 4] arr.delete(3) # 删除值为 3 的元素 puts arr.inspect # [1, 2, 4]
  3. 查找元素
    • include? 方法判断数组是否包含某个元素:arr = [1, 2, 3, 4] puts arr.include?(3) # true puts arr.include?(5) # false
    • index 方法返回指定元素的第一个索引位置:arr = [10, 20, 30, 40] puts arr.index(30) # 2
  4. 排序
    • sort 方法对数组进行升序排序:arr = [5, 3, 8, 1] puts arr.sort.inspect # [1, 3, 5, 8]
    • 如果数组中的元素是字符串,也可以排序:arr = ['banana', 'apple', 'cherry'] puts arr.sort.inspect # ["apple", "banana", "cherry"]
    • reverse 方法返回数组的倒序:arr = [1, 2, 3, 4] puts arr.reverse.inspect # [4, 3, 2, 1]
  5. 映射与迭代
    • map 方法对数组的每个元素执行一个块,并返回一个新的数组:arr = [1, 2, 3] squared = arr.map { |x| x ** 2 } puts squared.inspect # [1, 4, 9]
    • each 方法遍历数组的每个元素:arr = [1, 2, 3] arr.each { |x| puts x * 2 }
  6. 联合与拆分
    • concat 方法将一个数组连接到另一个数组:arr1 = [1, 2] arr2 = [3, 4] arr1.concat(arr2) puts arr1.inspect # [1, 2, 3, 4]
    • flatten 方法将多维数组展平为一维数组:arr = [1, [2, 3], [4, 5]] puts arr.flatten.inspect # [1, 2, 3, 4, 5]

四、二维数组

Ruby 的数组也可以是多维的,即数组中的元素可以是另一个数组。通过这种方式,可以创建二维或更高维度的数组。

示例:二维数组

arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
puts arr[0].inspect  # [1, 2, 3]
puts arr[1][2]  # 6

五、数组与哈希的结合

在 Ruby 中,数组和哈希常常一起使用,哈希中的值可以是数组,反之亦然。使用这两者的结合可以帮助你构建更复杂的数据结构。

示例:哈希中的数组

hash = { 'fruits' => ['apple', 'banana', 'cherry'], 'vegetables' => ['carrot', 'broccoli'] }
puts hash['fruits'].inspect  # ["apple", "banana", "cherry"]

六、总结

Ruby 数组是非常灵活和强大的数据结构,它支持多种数据类型、动态调整大小,并提供了大量的方法来进行元素的访问、修改、排序等操作。无论是在进行简单的列表管理,还是处理更复杂的数据结构时,Ruby 数组都是不可或缺的工具。