检查两个数组中的元素是否相同,与索引

时间:2016-11-30 08:46:59

标签: arrays swift set swift3

假设我有两个数组 - array1array2

let array1 = ["abc","pqr","xyz"]
let array2 = ["pqr", "xyz", "abc"]

然后我想要结果,因为array1等于array2。

此外,如果我的数组有重复的元素

let array1 = ["abc","pqr","xyz"]
let array2 = ["pqr", "xyz", "abc", "abc", "xyz"]

然后我想要结果,因为array1不等于array2。

搜索后我发现Compare two arrays with the same value but with a different order

但它在Objective C中,并且isEqualToSet在Swift3中不存在

2 个答案:

答案 0 :(得分:3)

使用Compare two arrays with the same value but with a different order中的计数集可以在Swift中使用 以及:

let set1 = NSCountedSet(array: array1)
let set2 = NSCountedSet(array: array2)
print(set1 == set2)

这适用于字符串,数字和其他值 映射到相应的基础类型NSStringNSNumber等。 与自定义结构一起使用时,它可能会产生意外结果。

对于纯Swift解决方案,请计算每个解决方案的出现次数 数组中的元素:

func countMap<T: Hashable>(array: [T]) -> [T: Int] {
    var dict = [T: Int]()
    for elem in array {
        dict[elem] = (dict[elem] ?? 0) + 1
    }
    return dict
}

并比较结果词典:

print(countMap(array: array1) == countMap(array: array2))

或者 - 如果数组元素是Comparable - 比较排序的数组:

print(array1.sorted() == array2.sorted())

答案 1 :(得分:0)

您可以使用Set==运算符在Swift中执行相同的操作。