0Pricing
Go Academy · บทเรียน

แมปในรูปแบบเซต

ใช้แมปเก็บค่าที่ไม่ซ้ำกัน

แมปในรูปแบบเซต เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

Go ไม่มีชนิดเซต

Go ไม่มีชนิด เซตในตัว วิธีตามแบบแผนของ Go ในการจำลองเซตของค่าที่ไม่ซ้ำกันคือใช้แมปที่มีสมาชิกของเซตเป็นคีย์

แมปค่าบูลีน

วิธีหนึ่งคือใช้ map[string]bool การมีคีย์อยู่และมีค่าเป็น true หมายความว่าองค์ประกอบนั้นอยู่ในเซต

package main

import "fmt"

func main() {
	set := map[string]bool{}
	set["apple"] = true
	set["banana"] = true
	fmt.Println(set)
}

การตรวจสอบสมาชิก

ใช้สำนวนจุลภาค-โอเคหรืออ่านค่าบูลีนโดยตรงเพื่อตรวจสอบการเป็นสมาชิก

package main

import "fmt"

func main() {
	set := map[string]bool{"apple": true}
	fmt.Println(set["apple"])
	fmt.Println(set["cherry"])
}

แมปโครงสร้างว่าง

เซตที่ใช้หน่วยความจำมีประสิทธิภาพกว่าสามารถสร้างด้วย map[string]struct{} โครงสร้างว่างใช้ ศูนย์ไบต์ ดังนั้นคุณจึงเก็บเฉพาะคีย์เท่านั้น

package main

import "fmt"

func main() {
	set := map[string]struct{}{}
	set["x"] = struct{}{}
	_, ok := set["x"]
	fmt.Println("x in set:", ok)
}

เหตุผลที่ใช้โครงสร้างว่าง

ค่าไม่มีความสำคัญในเซต มีเพียงคีย์เท่านั้นที่สำคัญ struct{}{} สื่อว่าคุณตั้งใจไม่สนใจค่า และไม่ใช้หน่วยความจำเพิ่มเติมต่อรายการ

การเพิ่มองค์ประกอบ

การเพิ่มคีย์ซ้ำไม่มีผล ดังนั้นเซตจึงบังคับให้สมาชิกไม่ซ้ำกันได้โดยธรรมชาติ

package main

import "fmt"

func main() {
	set := map[string]struct{}{}
	set["a"] = struct{}{}
	set["a"] = struct{}{}
	fmt.Println("size:", len(set))
}

การลบรายการซ้ำ

การใช้งานที่พบได้บ่อยคือการลบรายการซ้ำจากสไลซ์ โดยเพิ่มองค์ประกอบแต่ละรายการลงในเซต แล้วอ่านคีย์ที่ไม่ซ้ำกันกลับมา

package main

import "fmt"

func main() {
	input := []string{"a", "b", "a", "c", "b"}
	set := map[string]struct{}{}
	for _, v := range input {
		set[v] = struct{}{}
	}
	fmt.Println("unique count:", len(set))
}

การสร้างสไลซ์ที่ไม่ซ้ำกัน

ใช้เซตร่วมกับสไลซ์ผลลัพธ์เพื่อรักษาลำดับที่พบครั้งแรกไว้พร้อมกับลบรายการซ้ำ

package main

import "fmt"

func main() {
	input := []int{1, 2, 1, 3, 2}
	seen := map[int]struct{}{}
	result := []int{}
	for _, v := range input {
		if _, ok := seen[v]; !ok {
			seen[v] = struct{}{}
			result = append(result, v)
		}
	}
	fmt.Println(result)
}

ส่วนร่วมของเซต

หากต้องการหาองค์ประกอบที่มีร่วมกันในสองเซต ให้วนดูเซตหนึ่งและเก็บเฉพาะองค์ประกอบที่มีอยู่ในอีกเซตหนึ่ง

package main

import "fmt"

func main() {
	a := map[int]struct{}{1: {}, 2: {}, 3: {}}
	b := map[int]struct{}{2: {}, 3: {}, 4: {}}
	for k := range a {
		if _, ok := b[k]; ok {
			fmt.Println("common:", k)
		}
	}
}

การนำออกจากเซต

ใช้ delete เพื่อนำองค์ประกอบออกจากเซต

package main

import "fmt"

func main() {
	set := map[string]struct{}{"a": {}, "b": {}}
	delete(set, "a")
	_, ok := set["a"]
	fmt.Println("a in set:", ok)
}

การเลือกค่าบูลีนหรือโครงสร้างว่าง

ทั้งสองวิธีใช้ได้ ให้ใช้ map[T]bool เมื่อการอ่าน set[x] เป็นค่าบูลีนช่วยให้โค้ดอ่านง่ายขึ้น ให้ใช้ map[T]struct{} เมื่อคุณต้องการสื่อว่าค่าไม่มีความสำคัญและต้องการประหยัดหน่วยความจำในเซตขนาดใหญ่

ตรวจสอบความเข้าใจอย่างรวดเร็ว

เหตุใดจึงมักเลือกใช้ map[string]struct{} แทน map[string]bool สำหรับเซต

สรุป

การใช้แมปเป็นเซต:

  • Go ไม่มีชนิดเซต ให้ใช้แมปที่มีองค์ประกอบเป็นคีย์
  • map[T]bool หรือ map[T]struct{}
  • เหมาะอย่างยิ่งสำหรับการลบรายการซ้ำและการตรวจสอบสมาชิก

คำถามที่พบบ่อย

บทเรียน “แมปในรูปแบบเซต” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “แมปในรูปแบบเซต” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “แมปในรูปแบบเซต”

ใช้แมปเก็บค่าที่ไม่ซ้ำกัน คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “แมปในรูปแบบเซต” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. โครงสร้างภายในของแมป
  2. การตรวจสอบการมีอยู่
  3. แมปในรูปแบบเซต
  4. การวนซ้ำและลำดับ
← กลับไปที่ Go Academy