如何找出切片中的元素位置?

如何确定切片中存在的元素的位置?

我需要像下面这样的东西:

type intSlice []int func (slice intSlice) pos(value int) int { for p, v := range slice { if (v == value) { return p } } return -1 } 

对不起,没有通用的库函数来做到这一点。 Go没有写一个可以在任何片上运行的函数的简单方法。

你的函数可以工作,但是如果你使用range编写的话会更好一些。

如果你碰巧有一个字节片,有字节.IndexByte 。

你可以在惯用途中创buildgenerics函数:

 func SliceIndex(limit int, predicate func(i int) bool) int { for i := 0; i < limit; i++ { if predicate(i) { return i } } return -1 } 

和用法:

 xs := []int{2, 4, 6, 8} ys := []string{"C", "B", "K", "A"} fmt.Println( SliceIndex(len(xs), func(i int) bool { return xs[i] == 5 }), SliceIndex(len(xs), func(i int) bool { return xs[i] == 6 }), SliceIndex(len(ys), func(i int) bool { return ys[i] == "Z" }), SliceIndex(len(ys), func(i int) bool { return ys[i] == "A" })) 

这没有库函数。 你必须自己编码。

另一个select是使用sorting包对片进行sorting,然后search您正在查找的内容:

 package main import ( "sort" "log" ) var ints = [...]int{74, 59, 238, -784, 9845, 959, 905, 0, 0, 42, 7586, -5467984, 7586} func main() { data := ints a := sort.IntSlice(data[0:]) sort.Sort(a) pos := sort.SearchInts(a, -784) log.Println("Sorted: ", a) log.Println("Found at index ", pos) } 

版画

 2009/11/10 23:00:00 Sorted: [-5467984 -784 0 0 42 59 74 238 905 959 7586 7586 9845] 2009/11/10 23:00:00 Found at index 1 

这适用于基本types,如果您需要处理其他事情,您可以始终为自己的types实现sorting界面。 请参阅http://golang.org/pkg/sort

取决于你在做什么。