การวนซ้ำและลำดับ
จัดการลำดับสุ่มของแมป
การวนซ้ำและลำดับ เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
การวนซ้ำบนแมป
ใช้ range เพื่อวนดูแมป โดยรับคีย์และค่าแต่ละรายการ
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2}
for k, v := range m {
fmt.Println(k, v)
}
}ลำดับเป็นแบบสุ่ม
ลำดับการวนดูแมป ไม่ได้รับการรับประกัน Go จงใจทำให้ลำดับเป็นแบบสุ่ม การวนซ้ำเดียวกันสองครั้งอาจพิมพ์คีย์ออกมาในลำดับต่างกัน
เหตุใดจึงทำให้เป็นแบบสุ่ม
Go ทำให้ลำดับเป็นแบบสุ่มโดยตั้งใจ เพื่อไม่ให้นักพัฒนาพึ่งพาลำดับใดลำดับหนึ่งโดยไม่รู้ตัว โค้ดที่ขึ้นอยู่กับลำดับของแมปคือข้อผิดพลาดที่รอเกิดขึ้น
เฉพาะคีย์
ละเว้นค่าเพื่อวนดูเฉพาะคีย์
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
for k := range m {
fmt.Println(k)
}
}การรวบรวมคีย์
หากต้องการผลลัพธ์ที่มีลำดับคงที่ ให้รวบรวมคีย์ลงในสไลซ์ก่อน
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
keys := []string{}
for k := range m {
keys = append(keys, k)
}
fmt.Println("collected", len(keys), "keys")
}เรียงลำดับคีย์
เรียงลำดับคีย์ที่รวบรวมไว้ แล้วจึงวนดูสไลซ์ วิธีนี้ทำให้ได้ผลลัพธ์ที่มีลำดับแน่นอนและเป็นระเบียบ
package main
import (
"fmt"
"sort"
)
func main() {
m := map[string]int{"c": 3, "a": 1, "b": 2}
keys := []string{}
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Println(k, m[k])
}
}รูปแบบผลลัพธ์ตามลำดับ
รูปแบบรวบรวมแล้วเรียงลำดับเป็นวิธีมาตรฐานในการพิมพ์แมปให้มีลำดับที่คาดเดาได้ ให้เรียงลำดับคีย์เสมอเมื่อสิ่งสำคัญคือ ลำดับของผลลัพธ์
การเรียงลำดับคีย์จำนวนเต็ม
แนวคิดเดียวกันนี้ใช้กับคีย์ตัวเลขได้ด้วย sort.Ints
package main
import (
"fmt"
"sort"
)
func main() {
m := map[int]string{3: "c", 1: "a", 2: "b"}
keys := []int{}
for k := range m {
keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
fmt.Println(k, m[k])
}
}การแก้ไขระหว่างการวนซ้ำ
คุณสามารถลบคีย์ระหว่างการวนซ้ำด้วย range ได้อย่างปลอดภัย แต่การเพิ่มคีย์ระหว่างการวนซ้ำมีพฤติกรรมที่ไม่ได้กำหนด รายการใหม่อาจปรากฏหรือไม่ปรากฏก็ได้
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
for k := range m {
if k == "b" {
delete(m, k)
}
}
fmt.Println(len(m))
}การเรียงลำดับตามค่า
หากต้องการเรียงตามค่าแทนคีย์ ให้รวบรวมคีย์ก่อน แล้วเรียงลำดับด้วยการเปรียบเทียบที่อ่านค่าจากแมป
package main
import (
"fmt"
"sort"
)
func main() {
m := map[string]int{"a": 3, "b": 1, "c": 2}
keys := []string{}
for k := range m {
keys = append(keys, k)
}
sort.Slice(keys, func(i, j int) bool {
return m[keys[i]] < m[keys[j]]
})
for _, k := range keys {
fmt.Println(k, m[k])
}
}อย่าพึ่งพาลำดับ
ประเด็นสำคัญคือ อย่าคิดว่าการวนดูแมปจะมีลำดับใดลำดับหนึ่ง หากลำดับมีความสำคัญ ให้ดึงคีย์ออกมาใส่สไลซ์แล้วเรียงลำดับอย่างชัดเจน
ตรวจสอบความเข้าใจอย่างรวดเร็ว
คุณต้องพิมพ์รายการของแมปโดยเรียงคีย์ตามลำดับตัวอักษร วิธีที่ถูกต้องคืออะไร
สรุป
การวนซ้ำและการจัดลำดับ:
- ลำดับจากการใช้ range กับแมปเป็นแบบสุ่มโดยตั้งใจ
- รวบรวมคีย์ เรียงลำดับคีย์ แล้วจึงวนดูเพื่อให้ได้ผลลัพธ์ที่แน่นอน
- การลบระหว่างใช้ range ปลอดภัย แต่การเพิ่มมีพฤติกรรมที่ไม่ได้กำหนด
คำถามที่พบบ่อย
บทเรียน “การวนซ้ำและลำดับ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การวนซ้ำและลำดับ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การวนซ้ำและลำดับ”
จัดการลำดับสุ่มของแมป คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การวนซ้ำและลำดับ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- โครงสร้างภายในของแมป
- การตรวจสอบการมีอยู่
- แมปในรูปแบบเซต
- การวนซ้ำและลำดับ