一尘不染

我如何在Swift中检查两个数组是否包含相同的元素,而不管这些元素出现的顺序如何?

swift

假设有两个数组…

var array1 = ["a", "b", "c"]
var array2 = ["b", "c", "a"]

我希望这两个数组的比较结果为真,以下为…

var array1 = ["a", "b", "c"]
var array2 = ["b", "c", "a", "d"]

…是假的。如何在Swift中实现?我试图将两个数组都转换为集合,但是由于某些原因,Set()不断删除该数组包含的一些(通常重复的)对象。

任何帮助,将不胜感激。


阅读 500

收藏
2020-07-07

共1个答案

一尘不染

斯威夫特3,4

extension Array where Element: Comparable {
    func containsSameElements(as other: [Element]) -> Bool {
        return self.count == other.count && self.sorted() == other.sorted()
    }
}

// usage
let a: [Int] = [1, 2, 3, 3, 3]
let b: [Int] = [1, 3, 3, 3, 2]
let c: [Int] = [1, 2, 2, 3, 3, 3]

print(a.containsSameElements(as: b)) // true
print(a.containsSameElements(as: c)) // false

2020-07-07