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

Ruby中二维数组是否存在类似compact的空元素移除方法?

Ruby二维数组移除全nil子数组的实现方法

Ruby原生的Array#compact仅能移除数组顶层的nil元素,无法自动识别并移除内部所有元素均为nil的子数组,你需要的场景没有内置的直接方法,但可以通过简单的数组操作实现需求。


最简实现方式

直接使用reject加全量nil判断即可,代码如下:

# 移除所有元素全为nil的子数组
[[nil, nil], ["Prestation Standard", 1]].reject { |sub_arr| sub_arr.all?(&:nil?) }
# => [["Prestation Standard", 1]]

封装为自定义方法(可选)

如果需要频繁使用这个功能,可以给Array类扩展自定义方法,后续可以像调用compact一样直接使用:

class Array
  # 移除数组中所有元素全为nil的子数组
  def compact_full_nil_sub
    reject do |item|
      # 仅处理数组类型的元素,非数组元素正常保留
      item.is_a?(Array) && item.all?(&:nil?)
    end
  end
end

# 调用示例
[[nil, nil], ["Prestation Standard", 1], nil, "测试字符串"].compact_full_nil_sub
# => [["Prestation Standard", 1], nil, "测试字符串"]

扩展场景:同时清理子数组内部nil

如果你的使用场景里需要先把子数组内的nil清理掉,再移除空的子数组,可以组合使用compact和过滤逻辑:

[[nil, "a", nil], [nil, nil], ["b", 1]].map(&:compact).reject(&:empty?)
# => [["a"], ["b", 1]]

内容的提问来源于stack exchange,提问作者孙悟空

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:48:00