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

Ruby中对比二维数组子数组并返回含存在及缺失项的结果数组

Ruby 实现数组存在性标记转换函数

实现逻辑

  • 提取输入二维数组中所有出现过的字符串,去重后按字母序排序,作为结果数组的行维度基准
  • 逐行处理每个唯一字符串,依次校验该字符串是否存在于输入的每一个子数组中:存在则保留原字符串,不存在则填充nil
  • 所有行的处理结果组合即为最终返回的二维数组

基础实现代码

def transform_array(input_arr)
  # 提取全量唯一字符串并按字母序排序
  unique_strs = input_arr.flatten.uniq.sort
  # 逐行生成结果
  unique_strs.map do |str|
    input_arr.map { |sub_arr| sub_arr.include?(str) ? str : nil }
  end
end

优化实现(适用于大规模输入)

如果输入的子数组长度较长、数量较多,可以提前将子数组转为集合降低存在性查询的时间复杂度:

def transform_array(input_arr)
  # 预转集合优化查询效率
  sub_arr_sets = input_arr.map(&:to_set)
  input_arr.flatten.uniq.sort.map do |str|
    sub_arr_sets.map { |set| set.include?(str) ? str : nil }
  end
end

测试验证

# 测试输入
input = [
  ["AAA", "BBB", "CCC", "DDD"],
  ["BBB", "CCC", "DDD"],
  ["AAA", "CCC", "DDD"],
  ["AAA", "CCC", "DDD", "EEE"]
]

# 调用函数输出结果
pp transform_array(input)
# 输出符合预期:
# [
#   ["AAA", nil, "AAA", "AAA"],
#   ["BBB", "BBB", nil, nil],
#   ["CCC", "CCC", "CCC", "CCC"],
#   ["DDD", "DDD", "DDD", "DDD"],
#   [nil, nil, nil, "EEE"]
# ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:57:04