如何在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
相关产品推荐
相关产品推荐

