gpt4 book ai didi

arrays - 从 Golang 中的数组中选择元素的最惯用方法?

转载 作者:IT老高 更新时间:2023-10-28 13:01:09 25 4
gpt4 key购买 nike

我有一个字符串数组,我想排除以 foo_ 开头的值或长度超过 7 个字符的值。

我可以遍历每个元素,运行 if 语句,并将其添加到沿途的 slice 中。但我很好奇是否有一种惯用的或更类似于 golang 的方式来实现这一点。

举个例子,在 Ruby 中可以做同样的事情

my_array.select! { |val| val !~ /^foo_/ && val.length <= 7 }

最佳答案

在 Ruby 中没有单行代码,但使用辅助函数可以让它几乎一样短。

这是我们的辅助函数,它在 slice 上循环,只选择并返回满足函数值捕获的条件的元素:

func filter(ss []string, test func(string) bool) (ret []string) {
for _, s := range ss {
if test(s) {
ret = append(ret, s)
}
}
return
}

使用这个辅助函数你的任务:

ss := []string{"foo_1", "asdf", "loooooooong", "nfoo_1", "foo_2"}

mytest := func(s string) bool { return !strings.HasPrefix(s, "foo_") && len(s) <= 7 }
s2 := filter(ss, mytest)

fmt.Println(s2)

输出(在 Go Playground 上尝试):

[asdf nfoo_1]

注意:

如果预计会选择很多元素,那么预先分配一个“大”ret slice 并使用简单赋值而不是 append()。在返回之前,将 ret slice ,使其长度等于所选元素的数量。

注意 #2:

在我的示例中,我选择了一个 test() 函数来判断是否要返回一个元素。所以我不得不颠倒你的“排除”条件。显然,您可以编写辅助函数来期望一个测试器函数,它会告诉您要排除什么(而不是要包含什么)。

关于arrays - 从 Golang 中的数组中选择元素的最惯用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37562873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com