我有两个[PFObjects]数组。
例如(简化):
arr1: [PFObject] = [1, 2, 3, 4, 5, 6, 7, 8]
arr2: [PFObject] = [1, 2, 3, 4, 5]
将arr1
与arr2
进行比较的唯一方法是什么,只保留重复项(删除唯一值)。
所以arr1
看起来像:
arr1 = [1, 2, 3, 4, 5]
答案 0 :(得分:6)
let array = arr1.filter { arr2.contains($0) }
答案 1 :(得分:1)
第一个解决方案(循环播放):
var arr1: [PFObject] = [1, 2, 3, 4, 5, 6, 7, 8]
var arr2: [PFObject] = [1, 2, 3, 4, 5]
var temp: [PFObject] = []
for element in arr1 {
if contains(arr2, element) {
temp.append(element)
}
}
arr1 = temp
您可以遍历第一个数组,检查数组中是否包含每个元素,如果是,则可以将其添加到临时数组中。循环遍历每个元素后,您可以用临时数组替换第一个数组的值。
第二个解决方案(套装):
var arr1: [PFObject] = [1, 2, 3, 4, 5, 6, 7, 8]
var arr2: [PFObject] = [1, 2, 3, 4, 5]
let set1 = Set(arr1)
let set2 = Set(arr2)
var arr1= Array(set1.intersect(set2)) // [1, 2, 3, 4, 5]
你在这里做的是:
当然,既然你将使用套装,重复的元素将会丢失,但我猜你不应该成为问题
第三种解决方案(过滤器):
从Pham Hoan的答案中你可以使用过滤器来获取arr1的子集,闭包为你提供条件,这里是arr2包含你正在看的值。
let array = arr1.filter { arr2.contains($0) }
这显然是代码长度方面的较短解决方案。
如果你有非常大的数组,我不知道哪种技术会更有效。