Menu
CoddyTech

唯一项收集器

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

challenge icon

挑战

简单

创建一个使用 Go 惯用集合模式的去重系统,从字符串集合中过滤出唯一项。这项挑战将测试你使用 map[string]struct{} 惯用写法追踪已见项,并构建只包含唯一元素的集合的能力。

你会收到两个输入:

  • 一个字符串,其中的项以逗号分隔(例如,"apple,banana,apple,orange,banana,grape,apple")
  • 一个字符串,其中包含要合并的其他项,同样以逗号分隔(例如,"kiwi,apple,mango,banana,kiwi")

你的任务是:

  1. 创建一个名为 getUniqueItems 的函数,接收一个字符串切片,并返回一个只包含唯一字符串的新切片
  2. 在这个函数中,使用 map[string]struct{} 惯用写法追踪哪些项已经出现过
  3. 遍历输入切片,并对每一项执行以下操作:
    • 使用逗号 ok 惯用写法检查集合中是否存在该项
    • 如果该项之前没有出现过,就将它添加到集合和结果切片中
  4. 通过按逗号拆分第一个输入,获取初始项列表
  5. 通过按逗号拆分第二个输入,获取其他项
  6. 显示系统标题:"=== UNIQUE ITEM COLLECTOR ==="
  7. 显示原始项:"Original items: [comma-separated list of all original items]"
  8. 显示其他项:"Additional items: [comma-separated list of all additional items]"
  9. 使用 getUniqueItems 函数获取原始列表中的唯一项
  10. 显示原始列表中的唯一项:"Unique original items: [comma-separated list of unique items from original list]"
  11. 将两个输入切片合并为一个包含所有项的切片
  12. 使用 getUniqueItems 函数获取合并列表中的唯一项
  13. 显示最终的唯一项:"Final unique items: [comma-separated list of all unique items]"
  14. 显示集合统计信息:
    • "=== COLLECTION STATISTICS ==="
    • "Total original items: [count of original items]"
    • "Total additional items: [count of additional items]"
    • "Total combined items: [count of all items combined]"
    • "Unique items found: [count of unique items]"
    • "Duplicates removed: [total combined items minus unique items]"
  15. 显示完成消息:"Unique item collection completed successfully"

使用 strings 包拆分输入字符串,并使用 fmt 包输出。合并项以供显示时,使用 strings.Join,并以逗号作为分隔符。这项挑战展示了 Go 的集合惯用写法如何高效解决从集合中移除重复项这一常见问题。你会在数据处理应用中经常用到这种模式。

亲手试试

package main

import (
	"fmt"
	"strings"
)

func main() {
	// 读取输入
	var input1 string
	var input2 string
	fmt.Scanln(&input1)
	fmt.Scanln(&input2)
	
	// 将输入字符串解析为切片
	originalItems := strings.Split(input1, ",")
	additionalItems := strings.Split(input2, ",")
	
	// TODO:在这里编写你的代码
	// 1. 创建使用 map[string]struct{} 惯用写法的 getUniqueItems 函数
	// 2. 处理原始元素,获取不重复的元素
	// 3. 合并两个切片,从合并后的列表中获取不重复的元素
	// 4. 计算统计数据
	
	// 显示系统标题
	fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
	
	// 显示原始元素和新增元素
	fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
	fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
	
	// TODO:显示原始元素中不重复的元素、最终不重复的元素和统计数据
	// 使用 fmt.Printf 和 strings.Join 设置输出格式
}

逻辑与流程中的所有课

自己练习: Go 在线编译器