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

新手上路,请多包涵

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

我需要如下内容:

 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 许可协议

阅读 752
2 个回答

抱歉,没有通用的库函数可以执行此操作。 Go 没有直接的方法来编写可以在任何切片上运行的函数。

您的函数有效,但如果您使用 range 编写它会好一点。

如果您碰巧有字节切片,则有 bytes.IndexByte

原文由 Evan Shaw 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题