Arrays 查找一个数组[(String,Bool)]是否包含swift 4中Array2[String]中的任何字符串
我想在第一个数组中找到第二个数组中的任何项,将其附加到final,包括string和bool,然后复制在FakeArray中未找到的其余项,并将它们附加到finalArray,同时对每个项应用FALSE bool,以便它们可以存储在final数组中,因此结果应该是Arrays 查找一个数组[(String,Bool)]是否包含swift 4中Array2[String]中的任何字符串,arrays,swift,Arrays,Swift,我想在第一个数组中找到第二个数组中的任何项,将其附加到final,包括string和bool,然后复制在FakeArray中未找到的其余项,并将它们附加到finalArray,同时对每个项应用FALSE bool,以便它们可以存储在final数组中,因此结果应该是 var fakeArray [("Potato", True),("root", false),("dog", False),("cat", True)] var OtherFakeArray ["person","cat","dog
var fakeArray [("Potato", True),("root", false),("dog", False),("cat", True)]
var OtherFakeArray ["person","cat","dog","figg"]
var finalArrat[(String,Bool)]
因此,最终的数组包含来自otherFakeArray的所有条目,可以与fakeArray匹配的条目具有其原始bool状态,而未找到的条目将获得一个新的False状态以添加到最终的条目中 你可以试试
finalArray[("dog",false),("cat",True),("figg", False),("person",False)]
从fakerArray中筛选出otherFakerArray中包含的所有内容。找出所有未包含的项,并从中生成(_,false)元组并附加到包含的项 像这样的,
let res1 = fakeArray.filter { otherFakeArray.contains($0.0) }
let tem = fakeArray.map { $0.0 }
let final = otherFakeArray.filter { !tem.contains($0)}.map { ($0,false)} + res1
这是一个更好的版本
var result = fakeArray.filter { OtherFakeArray.contains($0.0) }
let notFoundItems = OtherFakeArray.filter { item in
!result.contains(where: { $0.0 == item })
}.map { ($0, false) }
result += notFoundItems
print(result)
您的代码审查
您没有使用Swift布尔类型。它应该是true
或false
之一,并且不能是true
和false
。你没有试着用xcode编译它吗。它不应该编译。你是怎么想出来这个问题的而没有尝试任何东西的
以下是您的实际类型的外观
let result = OtherFakeArray.map { string in
fakeArray.first(where: { $0.0 == string}) ?? (string, false)
}
为什么在结果中,带有“figg”的元组位于带有“person”的元组之前,这两个元组在
fakeArray
中都没有true
值,但在OtherFakeArray
中以其他顺序出现。如果在第一个数组中出现两次“cat”(可能具有不同的布尔值),该怎么办?使用flapMap()
可能比使用过滤器()
+map()
更快,不是吗?这应该迭代列表OtherFakeArray.count times,而不是OtherFakeArray.count times+filteredOtherFakeArray.count times。如果fakerArray包含otherFakerArray中的任何元素,则不必在flatMap内进行比较?@Larme如果您在运行时表示“更快”,则不一定。从flapmap返回值需要分配一个数组,这可能比在每个数组中执行一个额外的项需要更多的时间iteration@Sandeep哇,它真的起作用了!我可以请你解释一下逻辑吗?我不明白它是怎么工作的,即使它做了我需要的事情
let fakeArray = [("Potato", true),("root", false),("dog", false),("cat", true)]
let OtherFakeArray = ["person","cat","dog","figg"]