作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TL/DR
如何针对字符串数组过滤数组数组?
是否有一个JS/Py的some
或any
等效项,如果一个数组中的某些或所有项目都存在于另一个数组中,那么我可以过滤一个数组数组?
因此,例如,将其视为源数组:
arrays := [][]string{
{"some", "value"},
{"some", "value", "another"},
{"value", "another", "test"},
{"value", "test"},
{"some", "test"},
}
arrays
过滤
[]string{"some", "value"}
。
[[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)
}
最佳答案
inArray
函数中的逻辑对于检查单个针s string
是否在干草堆arr []string
中是正确的。如果您想扩展它以检查干草堆ss []string
中是否存在所有针arr []string
,那么您至少还需要遍历针。这是一个例子:
func allInArray(ss []string, arr []string) bool {
for _, s := range ss {
if !inArray(s, arr) {
return false
}
}
return true
}
arr
上循环的次数是
ss
中有针的次数。为了提高效率,您可以对干草堆进行预处理,将其变成
map[string]struct{}
,然后按照 map 的键检查指针,如下所示:
func allInArray(ss []string, arr []string) bool {
present := make(map[string]struct{})
for _, a := range arr {
present[a] = struct{}{}
}
for _, s := range ss {
if _, ok := present[s]; !ok {
return false
}
}
return true
}
arr
进行一次迭代以创建查找图,然后对
ss
进行一次迭代,以利用映射的恒定查找时间来检查
ss
中是否存在
arr
元素。
关于go - 我如何从一个数组中的一个数组中的所有项目与另一个数组中的某些项目相匹配的数组中过滤出一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61803288/
现在我正在尝试实现 flash programming specification对于 PIC32MX。我正在使用 PIC32MX512L 和 PIC32MX512H。 PIC32MX512L最终必须
我是一名优秀的程序员,十分优秀!