Arrays 查找一个数组[(String,Bool)]是否包含swift 4中Array2[String]中的任何字符串

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

我想在第一个数组中找到第二个数组中的任何项,将其附加到final,包括string和bool,然后复制在FakeArray中未找到的其余项,并将它们附加到finalArray,同时对每个项应用FALSE bool,以便它们可以存储在final数组中,因此结果应该是

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"]