แมปในรูปแบบเซต
ใช้แมปเก็บค่าที่ไม่ซ้ำกัน
แมปในรูปแบบเซต เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- โครงสร้างภายในของแมป
- การตรวจสอบการมีอยู่
- แมปในรูปแบบเซต
- การวนซ้ำและลำดับ