Sắp xếp loại bản đồ trong Go

Một trong những điểm đặc biệt của bản đồ cờ vây là các trường trả về theo thứ tự ngẫu nhiên.

Nếu bạn chạy ví dụ đơn giản này:

package main

import ( “fmt” )

func main() { ages := map[string]int{ “a”: 1, “c”: 3, “d”: 4, “b”: 2, }

<span style="color:#a6e22e">fmt</span>.<span style="color:#a6e22e">Println</span>(<span style="color:#a6e22e">ages</span>)
<span style="color:#a6e22e">fmt</span>.<span style="color:#a6e22e">Println</span>(<span style="color:#a6e22e">ages</span>)
<span style="color:#a6e22e">fmt</span>.<span style="color:#a6e22e">Println</span>(<span style="color:#a6e22e">ages</span>)

}

chơi

đầu ra sẽ là

map[b:2 a:1 c:3 d:4]
map[c:3 d:4 b:2 a:1]
map[d:4 b:2 a:1 c:3]

Điều này có mục đích, để tránh dựa vào thứ tự các mục, vì các triển khai khác nhau của trình biên dịch có thể sử dụng các hàm băm khác nhau. Đó là một trong những điều khiến Go rất rõ ràng trong việc tránh gây ra các giả định không hợp lệ.

Nếu bạn muốn đặt bản đồ theo chìa khóa thì sao?

package main

import ( “fmt” “sort” )

func main() { ages := map[string]int{ “a”: 1, “c”: 3, “d”: 4, “b”: 2, }

<span style="color:#a6e22e">names</span> <span style="color:#f92672">:=</span> make([]<span style="color:#66d9ef">string</span>, <span style="color:#ae81ff">0</span>, len(<span style="color:#a6e22e">ages</span>))

<span style="color:#66d9ef">for</span> <span style="color:#a6e22e">name</span> <span style="color:#f92672">:=</span> <span style="color:#66d9ef">range</span> <span style="color:#a6e22e">ages</span> {
	<span style="color:#a6e22e">names</span> = append(<span style="color:#a6e22e">names</span>, <span style="color:#a6e22e">name</span>)
}

<span style="color:#a6e22e">sort</span>.<span style="color:#a6e22e">Strings</span>(<span style="color:#a6e22e">names</span>) <span style="color:#75715e">//sort keys alphabetically

for _, name := range names { fmt.Println(ages[name]) }

}

chơi

Chương trình này sẽ in các giá trị của bản đồ, được sắp xếp theo khóa:

1
2
3
4

Các hướng dẫn về go khác: