快速查找一个数组[(String,Bool)]是否包含来自Array2 [String]的任何字符串

时间:2018-12-20 22:05:19

标签: arrays swift

var fakeArray [("Potato", True),("root", false),("dog", False),("cat", True)]
var OtherFakeArray ["person","cat","dog","figg"]
var finalArrat[(String,Bool)]

我想在第二个数组中的第一个数组中找到任何项目,将其附加到最终字符串和布尔值中,然后复制在FakeArray中找不到的其余项目,同时将它们附加到finalArray将FALSE bool应用于每个对象,以便可以将它们存储在最终数组中,因此结果应为

finalArray[("dog",false),("cat",True),("figg", False),("person",False)]

因此,最后一个数组包含来自otherFakeArray的所有条目,可以与fakeArray匹配的条目具有其原始的布尔状态,而未找到的条目将获得新的False状态添加到最终的状态。

2 个答案:

答案 0 :(得分:2)

从fakerArray中过滤出otherFakerArray中包含的所有内容。找出所有未包含的项,并从中进行元组(_,false)附加到包含的项中。

这样的事情,

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)

这是更好的版本,

let result = OtherFakeArray.map { string  in
    fakeArray.first(where: { $0.0 == string}) ?? (string, false)
}

您的代码审核

您没有使用Swift布尔类型。它应该是truefalse之一,不能是TrueFalse。您是否尝试使用xcode进行编译。它不应该编译。您是如何在没有实际尝试的情况下提出问题的。

这是您实际类型的外观。

let fakeArray = [("Potato", true),("root", false),("dog", false),("cat", true)]
let OtherFakeArray = ["person","cat","dog","figg"]

答案 1 :(得分:1)

您可以尝试

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