go proposal: slices: add LastIndex and LastIndexFunc

9wbgstp7  于 6个月前  发布在  Go
关注(0)|答案(4)|浏览(46)

我建议添加:

// LastIndex returns the index of the last occurrence of v in s, or -1 if not present.
func LastIndex[S ~[]E, E comparable](s S, v E) int

// LastIndexFunc returns the last index i satisfying f(s[i]), or -1 if none do.
func LastIndexFunc[S ~[]E, E any](s S, f func(E) bool) int

这与以下存在的字符相对应:

  • strings.IndexXXX
  • strings.LastIndexXXX
  • bytes.IndexXXX
  • bytes.LastIndexXXX

在我的用例中,我将Unicode字符作为[]rune进行处理,并希望找到给定字符的最后一次出现。

hxzsmxv2

hxzsmxv21#

这很有道理,但是作为反面观点,我们是否应该告诉人们在itertools存在的情况下使用iterutils.Index(slices.Backwards(s), v)?我认为棘手的地方在于即使使用切片。向后,你会遇到匹配值与索引的问题。但无论如何,这都是值得的。

vd8tlhqk

vd8tlhqk2#

索引与迭代器(如切片)的用法不同,因此不具有意义。

11dmarpk

11dmarpk3#

我可以看到一个合理的论点,即切片包应该包含字节和字符串包中所有相关函数的版本。

pgvzfuti

pgvzfuti4#

这很有道理,但是作为反面观点,我们是否应该告诉人们在iterutils存在的情况下使用iterutils.Index(slices.Backwards(s), v)?我认为棘手的地方在于即使使用切片。向后,你会遇到匹配值与索引的问题。但无论如何,这都是值得的。

slices.Backwards 不存在:
https://cs.opensource.google/search?q=backwards&ss=go/go:src/slices/
根据引用的评论,iterutils 也不存在。所以我不确定一个甚至不可操作的建议能带来多少价值。此外,实现非常简单:
https://github.com/golang/go/blob/go1.21.1/src/bytes/bytes.go#L146

相关问题