Menu
CoddyTech

检查元素是否存在

本课属于 Coddy GO 学习旅程的“逻辑与流程”单元。第 34 课,共 68 课。

现在你已经可以向集合中添加元素,接下来一个重要的操作是检查集合中是否存在特定元素。这时,Go 的“逗号 ok”惯用法就非常有用了。

要检查集合中是否存在某个元素,你可以使用与检查映射中是否存在某个键相同的语法:

_, ok := colors["red"]
if ok {
    fmt.Println("Red is in the set")
} else {
    fmt.Println("Red is not in the set")
}

这里使用下划线 _,因为我们不关心实际值(它始终是一个空结构体)。我们只关心布尔型的 ok 变量,它会告诉我们键是否存在。

你也可以直接在 if 语句中使用这种模式,让代码更简洁:

if _, exists := colors["blue"]; exists {
    fmt.Println("Blue is in the set")
}

这种成员测试快速而高效,利用 Go 优化过的 map 实现,为你带来真正的集合数据结构所具备的性能优势。

challenge icon

挑战

简单

使用 Go 集合惯用法构建一个团队成员验证系统,检查特定人员是否属于项目团队。本挑战将演示如何使用 comma ok 惯用法检查某个成员是否存在于集合中。

你会收到两个输入:

  • 一个字符串,包含以逗号分隔的团队成员(例如:"Alice,Bob,Charlie,Diana,Eve")
  • 一个字符串,包含以逗号分隔的待检查人员(例如:"Bob,Frank,Alice,Grace,Charlie")

你的任务是:

  1. 使用 Go 惯用法 map[string]struct{} 创建一个集合,用来存储团队成员
  2. 按逗号拆分第一个输入字符串,获取每个团队成员的姓名
  3. 使用空结构体字面量 {} 作为值,将每个团队成员添加到集合中
  4. 按逗号拆分第二个输入字符串,获取待验证人员的列表
  5. 对于每个待检查人员,使用 comma ok 惯用法 _, ok := teamSet[person] 检查其是否属于集合
  6. 显示每位待检查人员的验证结果:
    • 如果此人在团队中:"[person] is on the team"
    • 如果此人不在团队中:"[person] is not on the team"
  7. 检查完所有人员后,显示汇总信息:
    • "Team size: [team_member_count]"
    • "People checked: [people_checked_count]"
    • "Team members found: [found_count]"
    • "Non-team members: [not_found_count]"

使用 strings 包按逗号拆分输入字符串。本挑战将演示 comma ok 惯用法如何安全、高效地检查某个成员是否存在于 Go 集合中,并同时返回值和一个布尔值,以指示键是否存在。

亲手试试

package main

import (
	"fmt"
	"strings"
)

func main() {
	// 读取输入
	var teamMembersInput string
	var peopleToCheckInput string
	fmt.Scanln(&teamMembersInput)
	fmt.Scanln(&peopleToCheckInput)
	
	// 解析输入字符串
	teamMembers := strings.Split(teamMembersInput, ",")
	peopleToCheck := strings.Split(peopleToCheckInput, ",")
	
	// TODO: 在下方编写你的代码
	// 使用 map[string]struct{} 创建集合
	// 将团队成员添加到集合中
	// 使用逗号 ok 惯用写法检查每个人
	// 显示验证结果和汇总信息
	
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Go 在线编译器