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

如何在Go切片中首次匹配条件后跳过后续符合该条件的值?

解决Go语言中首次匹配特定条件后跳过后续同类元素的问题

问题描述

现有如下Go代码:

func main() {
    cloud := []string{"moon", "earth", "moon-light"}
    for _, value := range cloud {
        if strings.Contains(value, "mo") {
            fmt.Println("print1")
        } else if strings.Contains(value, "ear") {
            fmt.Println("print2")
        }
    }
}

当前运行输出:

print1
print2
print1

期望输出:

print1
print2

需求是首次匹配包含"mo"的条件后,跳过后续所有符合该条件的元素。


解决方案

核心思路是新增一个标记变量,记录是否已经处理过含"mo"的元素,后续遇到同类元素直接跳过。修改后的代码如下:

import (
    "fmt"
    "strings"
)

func main() {
    cloud := []string{"moon", "earth", "moon-light"}
    skipMo := false // 标记是否已处理过含"mo"的元素

    for _, value := range cloud {
        // 已处理过mo元素且当前元素含mo,直接跳过
        if skipMo && strings.Contains(value, "mo") {
            continue
        }

        if strings.Contains(value, "mo") {
            fmt.Println("print1")
            skipMo = true // 标记为已处理,后续同类元素跳过
        } else if strings.Contains(value, "ear") {
            fmt.Println("print2")
        }
    }
}

逻辑说明

  • skipMo初始为false,表示还未处理过含"mo"的元素
  • 遍历元素时,先判断是否已触发过mo匹配且当前元素符合条件,是则直接跳过当前循环
  • 第一次匹配到含"mo"的元素时,输出print1并将skipMo设为true,后续同类元素不再触发输出
  • 含"ear"的元素匹配逻辑保持不变,正常输出print2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:36:13