在 swift 中检查一个数组是否包含另一个数组的元素

Check if an array contains elements of another array in swift

提问人:Rob B 提问时间:7/31/2020 更新时间:8/1/2020 访问量:4864

问:

我需要检查一个数组是否包含另一个数组的至少一个或多个元素,并以 swift 格式打印出来。 这是我的情况:

var array1 = ["user1", "user2", "user3", "user4"]
var array2 = ["user3, "user5", "user7", "user9, "user4"]

//I need to get back an array that says that both the arrays contains ex. "user3" and "user4"

我在网上搜索了一下,但我只找到了相反的答案,它有助于检查使用 2 个数组之间是否存在差异array.symmetricDifference()

有什么帮助吗???谢谢

iOS 阵列 Swift 比较 相等

评论

0赞 Teja Nandamuri 7/31/2020
使用 .contains 进行基本循环和检查怎么样?
1赞 Leo Dabus 7/31/2020
不要使用数组。创建两个集合并获取其交集。
0赞 Rob B 7/31/2020
@LeoDabus你能解释一下吗
3赞 Leo Dabus 7/31/2020
Set(array1).intersection(Set(array2))
1赞 Leo Dabus 7/31/2020
Array(result)

答:

13赞 Leo Dabus 7/31/2020 #1

您可以简单地从您的第一个集合创建一个集合,并获取它与其他集合的交集:

let array1 = ["user1", "user2", "user3", "user4"]
let array2 = ["user3", "user5", "user7", "user9", "user4"]
let intersection = Array(Set(array1).intersection(array2)) // ["user4", "user3"] 

请注意,生成的集合的顺序是不可预测的。如果要保留第一个集合的顺序,可以创建第二个集合的集合,并筛选无法插入到其中的元素:

var set = Set(array2)
let intersection = array1.filter { !set.insert($0).inserted }  // ["user3", "user4"]

还可以在 RangeReplaceableCollection 上创建自己的交集方法:

extension RangeReplaceableCollection {
    func intersection<S: Sequence>(_ sequence: S) -> Self where S.Element == Element, Element: Hashable {
        var set = Set(sequence)
        return filter { !set.insert($0).inserted }
    }
}

用法:

let intersection = array1.intersection(array2)  // ["user3", "user4"]