笔者在写项目之中因为一起需求,从本地读取相应的值Json配置表与玩家自己的值进行比较(范围试的比较)从而得出玩家的相应奖励积分.
本地的配置文件读出后 笔者使用map储存的,结果在比较排名的时候 ,笔者发现map的读取是随机的而不是排序的。这样进行区间的比较就出现了问题。所以比开始埋坑之路
第一步我们先准备一个知识点就是数组的排序大小(下面内容是参考的大佬的文章)
对于 int 、 float64 和 string 数组或是分片的排序, go 分别提供了 sort.Ints() 、 sort.Float64s() 和 sort.Strings() 函数, 默认都是从小到大排序。
intList := [] int {2, 4, 3, 5, 7, 6, 9, 8, 1, 0}
float8List := [] float64 {4.2, 5.9, 12.3, 10.0, 50.4, 99.9, 31.4, 27.81828, 3.14}
stringList := [] string {"a", "c", "b", "d", "f", "i", "z", "x", "w", "y"}
sort.Ints(intList)
sort.Float64s(float8List)
sort.Strings(stringList)
第二部我们开始将map的ksy装进到切片之中 通过对切片的排序 从而将map中key的值进行排序 下面是程序(如果你不太懂什么是切片的话 你可以认为是不固定长度的数据,具体了解参照下面这个go教程的网址)
http://www.runoob.com/go/go-slice.html
lid.rankScore这个是一个map 的 中放着一个结构体 包括了
type LunjianRankScore struct {
Rank string
Score string
}
key是Rank
var RankScore_map []int = make([]int, 0)//建立一个切片
if(len(RankScore_map)==0) {//判断之前有没有机进行添加切片 有的话就不必在进入例如
for _, v := range lid.rankScore {
RankScore_map = append(RankScore_map, LunjianAtoiIgnorError(v.Rank)) //将map中的自己排名加入元素中去
//println("我们需要装进去的积分是多少" + v.Rank)
}
sort.Ints(RankScore_map)//将装进去的切片按顺序排列出来------这就做第一步的目的
//for _, v := range RankScore_map {//将内容读取一边
// println("我第都出来的是第="+strconv.Itoa(v)+" 相对想的数据排名积分是="+lid.rankScore[ strconv.Itoa(v)].Score)
//
//}
}