【发布时间】:2020-08-31 08:06:17
【问题描述】:
TL/DR
如何过滤一个数组数组以反对一个字符串数组?
如果一个数组中的部分或全部项目存在于另一个数组中,我可以在其中过滤数组数组吗?
因此,例如,将其视为源数组:
arrays := [][]string{
{"some", "value"},
{"some", "value", "another"},
{"value", "another", "test"},
{"value", "test"},
{"some", "test"},
}
如果在数组中找到这里的所有项目,我想通过[]string{"some", "value"} 过滤arrays。
预期的输出是
[[some value] [some value another]]
或者,如果我将过滤器更改为[]string{"some", "test"},则预期值为[[some test]]
我可以在我的测试代码中完全正确地理解逻辑
package main
import "fmt"
func inArray(s string, arr []string) bool {
for _, a := range arr {
if s == a {
return true
}
}
return false
}
func main() {
arrays := [][]string{
{"some", "value"},
{"some", "value", "another"},
{"value", "another", "test"},
{"value", "test"},
{"some", "test"},
}
filterBy := []string{"some", "value"}
hold := make([][]string, 0)
// Ignore this because it doesnt work as expected
for _, arr := range arrays {
for _, f := range filterBy {
if ok := inArray(f, arr); ok {
hold = append(hold, arr)
}
}
}
fmt.Println(hold)
}
【问题讨论】:
-
嗯...不完全是。我可以看到这些帖子中的大多数都引用了 for 循环中的指针,或者 range 是如何工作的,但并没有真正帮助我到达我想要到达的地方。
-
通过在每次迭代中重用
arr,您正在做与所有这些问题完全相同的事情。整体逻辑问题是另一回事 -
我很抱歉。非常新,我不完全理解你神秘的 cmets。我想我可以尝试重新编写它,它将为每个过滤器项返回一个布尔数组,然后尝试从该布尔数组中获取一个布尔值以复制
some函数。
标签: go