You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby数组打印方法及Dir.glob返回数组打印异常问题

Ruby数组打印与目录结构嵌套数组实现

一、Ruby中打印数组的方法

  • 使用p方法:直接输出数组的字面量格式,完整保留数组结构
    arr = ["file1.txt", "dir1", ["subfile.txt"]]
    p arr  # 输出: ["file1.txt", "dir1", ["subfile.txt"]]
    
  • 使用pp方法(Ruby 2.0+默认支持):格式化输出嵌套结构,可读性更强
    require 'pp'
    arr = ["file1.txt", "dir1", ["subfile.txt"]]
    pp arr
    # 输出:
    # ["file1.txt",
    #  "dir1",
    #  ["subfile.txt"]]
    
  • 使用inspect方法:返回数组的字符串表示,搭配puts也能输出数组格式
    arr = ["file1.txt", "dir1"]
    puts arr.inspect  # 输出: ["file1.txt", "dir1"]
    
  • 注意:直接用puts打印数组时,Ruby会自动遍历数组元素并逐行输出,因此看起来是纯列表而非数组结构。

二、Dir.glob结果打印与嵌套目录数组构建

1. 为什么打印dirs_array是路径列表?

你的dirs_array确实是Array类型,但用puts dirs_array时,Ruby会遍历数组里的每个路径字符串,逐行输出内容,所以呈现为纯路径列表。如果要以数组格式打印,改用p dirs_array或pp dirs_array即可。

2. 生成匹配目录结构的嵌套数组

Dir.glob("**/*")返回的是扁平的路径字符串数组,要生成和目录结构一致的嵌套数组,需要递归遍历目录并构建层级:

def build_nested_dir_tree(path)
  # 过滤掉当前目录.和上级目录..
  entries = Dir.entries(path).reject { |entry| entry == '.' || entry == '..' }
  entries.map do |entry|
    full_path = File.join(path, entry)
    if File.directory?(full_path)
      # 目录节点:以目录名为键,子内容为值
      { entry => build_nested_dir_tree(full_path) }
    else
      # 文件节点:直接存入文件名
      entry
    end
  end
end

# 使用示例
target_path = "/你的目标目录路径"
nested_dir_array = build_nested_dir_tree(target_path)
pp nested_dir_array

这段代码会递归遍历目录,将目录处理为{目录名 => 子内容数组}的结构,文件直接以字符串形式存入数组,最终得到与原目录结构完全匹配的嵌套数组。

内容的提问来源于stack exchange,提问作者beans3598

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:52:25