我建议添加:
// 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
进行处理,并希望找到给定字符的最后一次出现。
4条答案
按热度按时间hxzsmxv21#
这很有道理,但是作为反面观点,我们是否应该告诉人们在itertools存在的情况下使用
iterutils.Index(slices.Backwards(s), v)
?我认为棘手的地方在于即使使用切片。向后,你会遇到匹配值与索引的问题。但无论如何,这都是值得的。vd8tlhqk2#
索引与迭代器(如切片)的用法不同,因此不具有意义。
11dmarpk3#
我可以看到一个合理的论点,即切片包应该包含字节和字符串包中所有相关函数的版本。
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