📜  如何在 Ruby 中初始化数组(1)

📅  最后修改于: 2023-12-03 15:08:47.729000             🧑  作者: Mango

如何在 Ruby 中初始化数组

在 Ruby 中初始化数组有多种方式,本文将介绍常用的方法。

方式一:使用方括号 [] 声明数组

直接使用方括号 [] 声明数组,数组元素通过逗号隔开。

array = [1, 2, 3, 4, 5]

也可以使用 %w 和 %W 声明字符串数组。

string_array = %w(foo bar baz)

区别在于 %w 不支持字符串内插,而 %W 支持。

方式二:使用 Array.new 声明数组

Array.new 是 Ruby 中的内置方法,它可以创建一个包含指定个数元素的数组。

array = Array.new(5)

也可以初始化元素值。

array = Array.new(5, 'default')

如果数组的元素是一个可变对象,例如 Hash 或数组,则这种方式创建数组时,所有元素都是同一个对象的引用。

array = Array.new(3, Hash.new)
array[0]['foo'] = 'bar'
puts array #=> [{"foo"=>"bar"}, {"foo"=>"bar"}, {"foo"=>"bar"}]

为了避免这种情况,可以将数组元素初始化为 nil,并使用块来初始化每个元素:

array = Array.new(3) { Hash.new }
array[0]['foo'] = 'bar'
puts array #=> [{"foo"=>"bar"}, {}, {}]
方式三:使用 %i 和 %I 声明符号数组

类似于字符串数组的 %w 和 %W,Ruby 2.0 引入了 %i 和 %I 用于声明符号数组,符号之间使用空格或逗号隔开,不支持符号内插。

symbol_array = %i(foo bar baz)

区别在于 %i 返回的符号数组,符号不会被解析。而 %I 返回的符号数组,符号会被解析。

symbol_array = %I(#{foo})
方式四:使用 to_a 将 Range 转换为数组

Range 是 Ruby 中表示范围的对象,例如 1..5 表示 1 到 5 的范围。可以使用 to_a 方法将其转换成数组。

array = (1..5).to_a

还可以使用三个点号来表示不包括最后一个元素的范围。

array = (1...5).to_a
总结

本文介绍了 Ruby 中初始化数组的几种方式,包括使用方括号声明数组、使用 Array.new 声明数组、使用 %i 和 %I 声明符号数组、使用 to_a 将 Range 转换为数组。根据不同的需求选择不同的方式。