Golang实现有序遍历Map
本文最后更新于 848 天前,其中的信息可能已经有所发展或是发生改变。

Go的map元素遍历顺序(使用range关键字)是随机的,而不是遵循元素的添加顺序,为解决这一问题,可使用下面的遍历方式。

package main

import (
	"fmt"
	"sort"
)

func main() {
	map1 := map[int]string{
    0:	"java",
    1:	"golang",
    2:	"python",
	}

	var keys []int
	for key := range map1 {
		keys = append(keys, name)
	}
	sort.Ints(keys)
	for _, key := range keys {
		fmt.Printf("%st%dn", key, map1[key])
	}
}

可以看到,其关键思路就是先把所有Key拿出来排序,再按照排序后的进行遍历,主要用到了sort包的东西

关于sort还有些更个性化的用法,再看下面一个例子:

package main

import (
	"fmt"
	"sort"
)

type Person struct {
	Name string
	Age  int16
}

type personSlice []Person

func (p personSlice) Len() int {
	return len(p)
}

func (p personSlice) Less(i, j int) bool {
	return p[i].Age > p[j].Age
}

func (p personSlice) Swap(i, j int) {
	p[i], p[j] = p[j], p[i]
}

func main() {
	people := personSlice{
		{Name: "张三", Age: 10},
		{Name: "王五", Age: 50},
		{Name: "李四", Age: 30},
	}
	sort.Sort(people)
	fmt.Println(people)
}

// [{王五 50} {李四 30} {张三 10}]

通过实现go/src/sort/sort.Interface接口,自行指定struct结构体的排序规则,这一点跟java有些类似。

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇