DEV Community

Cover image for Golang: ทริค หาลำดับที่แน่นอนจาก Map
nathaponb
nathaponb

Posted on

Golang: ทริค หาลำดับที่แน่นอนจาก Map

#go

การวนลูป Map ในภาษา Go จะไม่การันตีเสมอไปว่า ลำดับ ของชุดข้อมูล ที่ถูกเข้าถึงในแต่ละรอบของการลูป จะเป็นไปตามลำดับที่เรากำหนด เพราะข้อมูลที่อยู่ใน Map จะเป็นการเก็บแบบ “ไม่มีลับดับที่แน่นนอน” (unordered)

จาก code snippet ด้านล่าง จะสังเกตได้ว่าในแต่ละรอบของ การวนลูป, ข้อมูลภายใน Map จะถูก print ออกมาสลับตำแหน่งกัน ทั้งๆที่เราได้กำหนดค่าให้ a,b และ c เป็นไปตามลำดับในเบื้องต้น

    func main() {
    kv := make(map[string]int)

    kv["a"] = 0
    kv["b"] = 1
    kv["c"] = 2

    for i := 0; i < 5; i++ {
      for k, v := range kv {
        fmt.Printf("key: %s --> value: %v\n", k, v)
      }
      fmt.Println("----------")
    }
  }
Enter fullscreen mode Exit fullscreen mode

หากต้องการเข้าถึงข้อมูลในลับดับที่แน่นอน จาก Map เราสามารถใช้ทริคง่ายๆ โดยการเก็บค่า key ไว้ใน slice และใช้ key อันนี้ในการเข้าถึง value จาก Map

  var keys []string

  for k,_ := range kv {
    keys = append(keys, k)
  }
Enter fullscreen mode Exit fullscreen mode

แต่อย่างที่กล่าวไป การวนลูป Map จะไม่การันตีลำดับชุดข้อมูลที่เข้าถึง ดังนั้นเราจึงต้อง sort ข้อมูลที่ได้มาตามลำดับที่ต้องการ

  sort.Strings(keys)
Enter fullscreen mode Exit fullscreen mode

และลองมาวนลูป Keys เพื่อเข้าถึงข้อมูลจาก Map กันอีกครั้ง

    for i := 0; i < 5; i++ {
    for _, key := range keys {
      fmt.Printf("key: %s --> value: %v\n", key, kv[key])
    }
    fmt.Println("----------")
  }
Enter fullscreen mode Exit fullscreen mode

ข้อมูลที่ได้จาก Map ก็จะมีลับดับที่แน่นอน.

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay