วนซ้ำคอลเลกชันด้วย range
ใช้ range กับสไลซ์ แมป และสตริง
วนซ้ำคอลเลกชันด้วย range เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
range คืออะไร
range เป็นรูปแบบพิเศษของลูป for ที่ใช้วนซ้ำอาร์เรย์ สไลซ์ แมป สตริง และแชนเนล ในแต่ละรอบจะคืนค่าดัชนี (หรือคีย์) และค่า
การวนซ้ำด้วย range บนสไลซ์
ส่งคืนดัชนีและสำเนาของสมาชิก:
package main
import "fmt"
func main() {
fruits := []string{"apple", "banana", "cherry"}
for i, fruit := range fruits {
fmt.Printf("%d: %s\n", i, fruit)
}
}การวนซ้ำด้วย range บนอาร์เรย์
ทำงานเหมือนกับสไลซ์ทุกประการ โดยสมาชิกของอาร์เรย์จะถูกคัดลอกในแต่ละรอบ:
package main
import "fmt"
func main() {
nums := [3]int{10, 20, 30}
for _, v := range nums {
fmt.Println(v)
}
}การวนซ้ำด้วย range บนแมป
ส่งคืนคีย์และค่าในลำดับสุ่ม:
package main
import "fmt"
func main() {
capitals := map[string]string{
"France": "Paris",
"Japan": "Tokyo",
}
for country, city := range capitals {
fmt.Printf("%s -> %s\n", country, city)
}
}การวนซ้ำด้วย range บนสตริง
วนซ้ำผ่านจุดรหัส Unicode (rune) ไม่ใช่ไบต์ โดยดัชนีคือตำแหน่งไบต์ที่จุดเริ่มต้นของ rune:
package main
import "fmt"
func main() {
for i, r := range "héllo" {
fmt.Printf("%d: %c\n", i, r)
}
}การละทิ้งดัชนี
ใช้ _ เพื่อไม่สนใจดัชนีเมื่อคุณต้องการเฉพาะค่า:
package main
import "fmt"
func main() {
total := 0
for _, v := range []int{1, 2, 3, 4, 5} {
total += v
}
fmt.Println(total) // 15
}การวนด้วย range โดยใช้เฉพาะดัชนี
การละเว้นค่าจะทำให้ได้เฉพาะดัชนี เหมาะสำหรับการแก้ไขข้อมูลในตำแหน่งเดิม:
package main
import "fmt"
func main() {
s := []int{1, 2, 3}
for i := range s {
s[i] *= 2
}
fmt.Println(s) // [2 4 6]
}การวนซ้ำด้วย range บนแชนเนล
range จะอ่านค่าจากแชนเนลจนกว่าแชนเนลนั้นจะถูกปิด:
package main
import "fmt"
func main() {
ch := make(chan int, 3)
ch <- 1; ch <- 2; ch <- 3
close(ch)
for v := range ch {
fmt.Println(v)
}
}กับดักตัวแปรในลูป
ตัวแปรของ range จะถูกนำกลับมาใช้ใหม่ในแต่ละรอบ การเก็บที่อยู่ของตัวแปรนี้ไว้ในโกโรทีนหรือคลอเชอร์จึงเป็นข้อผิดพลาดที่พบได้บ่อย:
package main
import "fmt"
func main() {
nums := []int{1, 2, 3}
funcs := make([]func(), 3)
for i, v := range nums {
v := v // shadow with a copy
funcs[i] = func() { fmt.Println(v) }
}
for _, f := range funcs { f() } // 1 2 3
}การแก้ไขสมาชิกของสไลซ์
ค่าที่ได้จาก range เป็นสำเนา หากต้องการแก้ไข ให้ใช้ดัชนี:
package main
import "fmt"
func main() {
s := []int{10, 20, 30}
for i := range s {
s[i]++
}
fmt.Println(s) // [11 21 31]
}ตรวจสอบความเข้าใจอย่างรวดเร็ว
เมื่อวนซ้ำบนสตริง ตัวแปรค่าจะมีชนิดใด
สรุป: range
ประเด็นสำคัญ:
rangeใช้ได้กับสไลซ์ อาร์เรย์ แมป สตริง และแชนเนล- ส่งคืน (ดัชนี, ค่า) โดยสามารถละทิ้งอย่างใดอย่างหนึ่งได้ด้วย
_ - ค่าจาก range เป็นสำเนา หากต้องการแก้ไขให้ใช้ดัชนี
- สตริงจะให้ค่าเป็น rune ไม่ใช่ไบต์
- ลำดับการวนซ้ำของแมปเป็นแบบสุ่ม
โจทย์ฝึกปฏิบัติ
ใช้ range เพื่อคำนวณผลรวมของค่าทั้งหมดใน map[string]int และพิมพ์ทั้งแต่ละรายการกับผลรวม
คำถามที่พบบ่อย
บทเรียน “วนซ้ำคอลเลกชันด้วย range” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “วนซ้ำคอลเลกชันด้วย range” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “วนซ้ำคอลเลกชันด้วย range”
ใช้ range กับสไลซ์ แมป และสตริง คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “วนซ้ำคอลเลกชันด้วย range” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- อาร์เรย์: คอลเลกชันความยาวคงที่
- สไลซ์: รายการแบบไดนามิก
- แมป: ที่เก็บคู่คีย์-ค่า
- วนซ้ำคอลเลกชันด้วย range