如何对 Golang 中的 Search 进行切片排序?
Go 语言提供了基本常量和运行时反射的内置支持实现来操作排序包。Golang 具有功能相互独立运行的能力。借助该功能,我们可以通过导入“排序”包,轻松对整数和字符串进行排序。这些函数是在排序包下定义的,因此您需要在程序中导入排序包。排序函数可以搜索任何重要的 Golang 排序函数列表,如下所示:
语法:
func Search(n int, f func(int) bool) int
返回值:此函数返回[0,n]中 f(i)为真的最小索引 I,假设在范围[0,n]上,f(i) == true 意味着 f(i+1) == true。
此功能仅用于对搜索的一部分进行排序。以下示例说明了上述方法在 Golang 中的使用:
例 1:
package main
import (
"fmt"
"sort"
)
func main() {
// integer slice in unsort order
intSlice := []int{10, 3, 6, 10, 15, 21, 38, 26, 25, 45}
a := 15
pos := sort.SearchInts(intSlice, a)
fmt.Printf("Found %d at index %d in %v\n", a, pos, intSlice)
// string slice in unsorted order
strSlice := []string{"Pink", "Orange",
"Green", "Black",
"Purple", "Blue", "Red"}
b := "Green"
pos = sort.SearchStrings(strSlice, b)
fmt.Printf("Found %s at index %d in %v\n",
b, pos, strSlice)
// string slice in unsorted order
fltSlice := []float64{612.15, 114.510,
211.144, 396.242, 485.143}
c := 211.144
pos = sort.SearchFloat64s(fltSlice, c)
fmt.Printf("Found %f at index %d in %v\n",
c, pos, fltSlice)
// sorted slice in descending
d := []int{45, 38, 26, 25, 21, 15, 10, 10, 6, 3}
e := 38
i := sort.Search(len(d), func(i int) bool { return d[i] <= e })
if i < len(d) && d[i] == e {
fmt.Printf("found %d at index %d in %v\n", e, i, d)
} else {
fmt.Printf("%d not found in %v\n", e, d)
}
}
输出:
Found 15 at index 4 in [10 3 6 10 15 21 38 26 25 45]
Found Green at index 6 in [Pink Orange Green Black Purple Blue Red]
Found 211.144000 at index 2 in [612.15 114.51 211.144 396.242 485.143]
found 38 at index 1 in [45 38 26 25 21 15 10 10 6 3]
示例 2: 给定示例说明了搜索以不同形式按升序排序的列表。
package main
import (
"fmt"
"sort"
)
func main() {
// unsorted
s := []int{19, 42, 24, 63, -20, 59}
sort.Sort(sort.IntSlice(s))
// sorted
fmt.Println(s)
fmt.Println("Length of Slice: ", sort.IntSlice.Len(s))
fmt.Println("40 found in Slice at position: ",
sort.IntSlice(s).Search(40))
fmt.Println("-10 found in Slice at position: ",
sort.IntSlice(s).Search(6))
fmt.Println("-----------------------------------")
t := []string{"Pink", "Orange", "Green",
"Black", "Purple", "Blue", "Red"}
sort.Sort(sort.StringSlice(t))
fmt.Println(t)
fmt.Println("Length of Slice: ", sort.StringSlice.Len(t))
fmt.Println("Black found in Slice at position: ",
sort.StringSlice(t).Search("Black"))
fmt.Println("Orange found in Slice at position: ",
sort.StringSlice(t).Search("Orange"))
fmt.Println("-----------------------------------")
// unsorted
u := []float64{602.15, 194.10, 611.144, 396.42, 655.433}
sort.Sort(sort.Float64Slice(u))
// sorted
fmt.Println(u)
fmt.Println("Length of Slice: ", sort.Float64Slice.Len(u))
fmt.Println("611.144 found in Slice at position: ",
sort.Float64Slice(u).Search(611.144))
fmt.Println("194.10 found in Slice at position: ",
sort.Float64Slice(u).Search(194.10))
}
输出:
[-20 19 24 42 59 63]
Length of Slice: 6
40 found in Slice at position: 3
-10 found in Slice at position: 1
-----------------------------------
[Black Blue Green Orange Pink Purple Red]
Length of Slice: 7
Black found in Slice at position: 0
Orange found in Slice at position: 3
-----------------------------------
[194.1 396.42 602.15 611.144 655.433]
Length of Slice: 5
611.144 found in Slice at position: 3
194.10 found in Slice at position: 0
版权属于:月萌API www.moonapi.com,转载请注明出处