📅  最后修改于: 2023-12-03 15:08:47.729000             🧑  作者: Mango
在 Ruby 中初始化数组有多种方式,本文将介绍常用的方法。
直接使用方括号 [] 声明数组,数组元素通过逗号隔开。
array = [1, 2, 3, 4, 5]
也可以使用 %w 和 %W 声明字符串数组。
string_array = %w(foo bar baz)
区别在于 %w 不支持字符串内插,而 %W 支持。
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"}, {}, {}]
类似于字符串数组的 %w 和 %W,Ruby 2.0 引入了 %i 和 %I 用于声明符号数组,符号之间使用空格或逗号隔开,不支持符号内插。
symbol_array = %i(foo bar baz)
区别在于 %i 返回的符号数组,符号不会被解析。而 %I 返回的符号数组,符号会被解析。
symbol_array = %I(#{foo})
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 转换为数组。根据不同的需求选择不同的方式。