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

如何移除other_names中与names元素匹配的嵌套切片?

修正Go语言嵌套切片的元素删除逻辑

原代码存在的问题

  • 变量名错误:代码中使用了未定义的copies变量,实际应指向other_names
  • 删除逻辑漏洞:仅通过origl = copies[v][:d]截取前d个元素,会丢失d之后未匹配的元素,且未处理多层嵌套结构
  • 结构丢失:最终输出的是单个二维切片,没有还原原有的三维切片结构

修正后的代码

func Duplicate() {
    var names = [][]string{
        {"Malder", "Carl"},
        {"Adam", "Kent"},
    }

    var other_names = [][][]string{
        {
            {"Sony", "Bond"},
            {"Adam", "Kent"},
            {"Piter", "Nina"},
        },
    }

    // 把names中需要匹配的第二个元素存入map,实现快速查询
    matchSet := make(map[string]bool)
    for _, name := range names {
        matchSet[name[1]] = true
    }

    // 构建处理后的嵌套切片结果
    processed := make([][][]string, len(other_names))
    for groupIdx, group := range other_names {
        filtered := make([][]string, 0, len(group))
        for _, item := range group {
            // 仅保留第二个元素不在匹配集合中的项
            if !matchSet[item[1]] {
                filtered = append(filtered, item)
            }
        }
        processed[groupIdx] = filtered
    }

    // 输出符合预期的结果
    fmt.Println(processed)
}

代码说明

  1. 查询效率优化:用map存储需要匹配的元素值,将单次查询的时间复杂度从O(n)降到O(1),避免多层嵌套循环的低效遍历
  2. 结构完整性保留:遍历原三维切片的每一层分组,对每个分组内的元素逐一过滤,最终还原原有的嵌套结构
  3. 安全的切片操作:通过append构建新切片,避免修改原切片的底层数组,同时确保所有不匹配的元素都被正确保留

执行修正后的代码,会得到预期的结果:

[[[Sony Bond] [Piter Nina]]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:20:43