如何确定切片中存在的元素的位置?
我需要如下内容:
type intSlice []int
func (slice intSlice) pos(value int) int {
for p, v := range slice {
if (v == value) {
return p
}
}
return -1
}
原文由 OCyril 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用惯用的方式创建通用函数:
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" }))
原文由 Hodza 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
5 回答2.2k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.3k 阅读
2 回答889 阅读✓ 已解决
2 回答2.2k 阅读
抱歉,没有通用的库函数可以执行此操作。 Go 没有直接的方法来编写可以在任何切片上运行的函数。
您的函数有效,但如果您使用
range
编写它会好一点。如果您碰巧有字节切片,则有 bytes.IndexByte 。