Ruby如何创建数组

来源:IPIPP.com作者:头衔:全栈工程师
导读:本期聚焦于小伙伴创作的《Ruby如何创建数组》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Ruby如何创建数组》有用,将其分享出去将是对创作者最好的鼓励。

在Ruby开发中,数组是最常用的数据结构之一,用来存储有序的元素集合,支持存储不同类型的数据。掌握多种数组创建方式,能够让我们在不同场景下更高效地编写代码。

Ruby如何创建数组

字面量方式创建数组

这是最常用也最简洁的数组创建方式,直接使用方括号包裹元素,元素之间用逗号分隔即可。这种方式适合已知数组元素的情况,语法清晰直观。

# 创建包含整数的数组
int_arr = [1, 2, 3, 4, 5]
# 创建包含不同数据类型的数组
mixed_arr = [1, "hello", :symbol, 3.14, true]
# 创建空数组
empty_arr = []
puts int_arr.inspect
puts mixed_arr.inspect
puts empty_arr.inspect

使用Array.new方法创建数组

Array类的new方法提供了更灵活的数组创建能力,可以指定数组的长度、初始值,甚至通过块来生成每个元素的初始值。

指定长度的空数组

只传入长度参数时,数组会初始化为对应长度的nil元素集合。

# 创建长度为5的空数组,元素默认是nil
arr1 = Array.new(5)
puts arr1.inspect  # 输出 [nil, nil, nil, nil, nil]

指定长度和初始值

传入第二个参数作为所有元素的初始值,需要注意如果是引用类型,所有元素会指向同一个对象。

# 创建长度为3,所有元素都是0的数组
arr2 = Array.new(3, 0)
puts arr2.inspect  # 输出 [0, 0, 0]

# 注意:如果是哈希作为初始值,所有元素指向同一个哈希
arr3 = Array.new(2, {})
arr3[0][:a] = 1
puts arr3.inspect  # 输出 [{:a=>1}, {:a=>1}],两个元素共享同一个哈希

通过块生成初始值

传入块的话,每个元素都会调用块逻辑生成,避免引用类型共享的问题。

# 创建长度为3,每个元素是对应索引的平方的数组
arr4 = Array.new(3) { |i| i ** 2 }
puts arr4.inspect  # 输出 [0, 1, 4]

# 创建包含两个不同哈希的数组
arr5 = Array.new(2) { {} }
arr5[0][:a] = 1
puts arr5.inspect  # 输出 [{:a=>1}, {}],两个哈希互不影响

使用%w和%W快捷方式创建字符串数组

当需要创建由字符串组成的数组时,%w和%W可以简化写法,不需要给每个字符串加引号,元素之间用空格分隔即可。%w不会进行字符串插值,%W支持字符串插值。

# %w创建字符串数组,元素不会被插值
arr6 = %w[apple banana orange]
puts arr6.inspect  # 输出 ["apple", "banana", "orange"]

name = "ruby"
# %W支持插值
arr7 = %W[hello #{name} world]
puts arr7.inspect  # 输出 ["hello", "ruby", "world"]

使用数组推导式(map/filter组合)

可以通过对现有集合进行遍历处理,生成新的数组,这种方式适合基于已有数据生成新数组的场景。

# 基于范围生成1到5的平方数组
arr8 = (1..5).map { |i| i * 2 }
puts arr8.inspect  # 输出 [2, 4, 6, 8, 10]

# 过滤现有数组生成新数组
original = [1, 2, 3, 4, 5, 6]
even_arr = original.select { |i| i.even? }
puts even_arr.inspect  # 输出 [2, 4, 6]

其他方法创建数组

还有一些场景下的特殊创建方式,比如通过字符串的split方法拆分得到数组,或者使用to_a方法将可枚举对象转为数组。

# 字符串拆分得到数组
str = "a,b,c,d"
arr9 = str.split(",")
puts arr9.inspect  # 输出 ["a", "b", "c", "d"]

# 范围转数组
range = 1..3
arr10 = range.to_a
puts arr10.inspect  # 输出 [1, 2, 3]

不同创建方式的适用场景总结

创建方式适用场景
字面量[]已知所有元素,元素数量少,类型不限
Array.new需要指定长度、初始值,或者需要动态生成每个元素
%w/%W创建纯字符串数组,简化引号书写
推导式/map/select基于已有集合处理生成新数组
split/to_a从字符串、范围等可枚举对象转成数组

Ruby数组创建数组数组初始化修改时间:2026-05-29 04:56:39

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。