[英]Compare a string against a struct field within a slice of structs (sort.Search golang)
type user struct {
name string
age int
}
data := []user{
{
name: "timothy",
age: 23,
},
{
name: "johnson",
age: 45,
},
{
name: "jason",
age: 44,
},
{
name: "handson",
age: 15,
},
{
name: "andrew",
age: 41,
},
}
fmt.Println(data)
val := "johnson"
found := false
i := sort.Search(len(data), func(i int) bool {
println(i)
return data[i].name == val
})
if i < len(data) && data[i].name == val {
found = true
}
fmt.Println(val, found)
我試圖在包含一些字符串字段的結構數組中搜索一個字符串,但找不到匹配項,例如使用 johnson 或 andrew。 問題是什么? 謝謝!
這會將數據按順序排序,然后對其進行搜索。
我必須聲明一個用戶類型,它是用戶的一部分,然后為用戶類型實現 Len/Cmp/Swap
sort.Search function 使用 >=
package main
import (
"fmt"
"sort"
)
type user struct {
name string
age int
}
type users []user
func (o users) Len() int { return len(o) }
func (o users) Less(i, j int) bool { return o[i].name < o[j].name }
func (o users) Swap(i, j int) { o[i], o[j] = o[j], o[i] }
func main() {
data := users{
{
name: "timothy",
age: 23,
},
{
name: "johnson",
age: 45,
},
{
name: "jason",
age: 44,
},
{
name: "handson",
age: 15,
},
{
name: "andrew",
age: 41,
},
}
sort.Sort(data)
fmt.Println(data)
val := "johnson"
found := false
i := sort.Search(len(data), func(i int) bool {
println(i)
return data[i].name >= val
})
if i < len(data) && data[i].name == val {
found = true
}
fmt.Println(val, found)
return
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.