sort.Search (二分)
sort.Search 需要自己实现接口 也比较简单
当然有很多实现方式 以下所展示的方式 是sort.SearchInts() 等中的实现方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package main
import ( "fmt" "sort" )
func main() { a := []int{2, 4, 6} id := sort.Search(len(a), func(i int) bool { return a[i] >= 1 })
fmt.Println(id) }
|
当然也可以更简单一些直接调用sort.SearchInts()/ sort.SearchStrings()
如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| package main
import ( "fmt" "sort" )
func main() { a := []int{2, 4, 6} id := sort.SearchInts(a, 1) fmt.Println(id)
id = sort.SearchInts(a, 2) fmt.Println(id)
id = sort.SearchInts(a, 3) fmt.Println(id)
id = sort.SearchInts(a, 7) fmt.Println(id)
}
|
map的相关使用
go 的map为内置结构 不需要额外引入但使用起来与其他语言略有差别
map的基础使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| m := map[int]int{}
m1 := make(map[int]int)
m[0] = 1
if v,ok := m[0];ok{ fmt.Println(v) }else{ fmt.Println("不存在") }
for k := range m{ fmt.Println(k) }
for k,v := range m{ fmt.Println(k,v) }
|
map 当set使用
go基本库函数里面没有set 要外部引入 但可以用map当作set
通常是将不同的键均指向一个相同的值即可
1 2 3 4 5 6 7 8
| s := map[int]int{}
s[0] = -1 s[1] = -1 s[241] = -1 for v := range s{ fmt.Println(v) }
|
排序sort
go的排序使用sort库函数 和c++有些类似
可以使用 sort.Ints() sort.Slice()
等
但建议统一使用sort.Slice() 不容易出错 sort.Ints()显然只能匹配int型且只能正序 同理float型也是一个道理只能和相应类型的匹配
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| package main
import ( "fmt" "sort" )
func main() { nums := []int{2, 1, 6, 3, 5, 4} sort.Slice(nums, func(i, j int) bool { return nums[i] < nums[j] }) sort.Ints(nums)
maritx := [][]int{ {3, 2}, {4, 1}, {9, 3}, } sort.Slice(maritx, func(i, j int) bool { return maritx[i][1] < maritx[j][1] }) fmt.Println(maritx)
}
|
数字与字符串之间的相互转换
go 语言不能直接用string 去转 不然会得到一个空值 这个还是蛮坑的 正确的要使用strconv库中的Itoa方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package main
import ( "fmt" "strconv" )
func main() { a := 131 s := strconv.Itoa(a) fmt.Printf("%s %T \n", s, s)
ss := "123"
b, _ := strconv.Atoi(ss) fmt.Printf("%v %T \n", b, b) }
|