Qua*_* Hà 12 arrays compare ios swift
我有一个A类:
class A {
var identifier: String?
var quantity: Int = 0
}
Run Code Online (Sandbox Code Playgroud)
两个A实例数组:
var array1: [A] = [a1, a2, a3, a4]
var array2: [A] = [a5, a6, a7, a8]
Run Code Online (Sandbox Code Playgroud)
我不知道哪种方法最好检查:
array1==array2 if a1.identifier == a5.identifier, a2.identifier == a6.identifier, a3.identifier==a7.identifier, a4.identifier==a8.identifier
在Swift中.
请帮我...
Rah*_*thi 25
你可以尝试这样:
let result = zip(array1, array2).enumerated().filter() {
$1.0 == $1.1
}.map{$0.0}
Run Code Online (Sandbox Code Playgroud)
假设您的数据如下:
struct Person
{
let name: String
let id: Int
}
var people1 = [
Person(name: "Quang Hà", id: 42),
Person(name: "Lý H?i", id: 23),
Person(name: "Maria", id: 99)
]
var people2 = [
Person(name: "Maria yyy", id: 99),
Person(name: "Billy", id: 42),
Person(name: "David", id: 23)
]
Run Code Online (Sandbox Code Playgroud)
这是比较具有id的两个人数组的方法:
func areArrayPeopleEqual(people1:[Person], people2: [Person]) -> Bool {
var array1 = people1
var array2 = people2
// Don't equal size => false
if array1.count != array2.count {
return false
}
// sort two arrays
array1.sortInPlace() { $0.id > $1.id }
array2.sortInPlace() {$0.id > $1.id }
// get count of the matched items
let result = zip(array1, array2).enumerate().filter() {
$1.0.id == $1.1.id
}.count
if result == array1.count {
return true
}
return false
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特4
以下方法使其变得更加容易。
方法1-使用平等协议
第一步-使您的班级“ A”等于
extension A: Equatable {
static func ==(lhs: A, rhs: A) -> Bool {
// Using "identifier" property for comparison
return lhs.identifier == rhs.identifier
}
}
Run Code Online (Sandbox Code Playgroud)
第2步-按升序或降序对数组进行排序
let lhsArray = array1.sorted(by: { $0.identifier < $1.identifier })
let rhsArray = array2.sorted(by: { $0.identifier < $1.identifier })
Run Code Online (Sandbox Code Playgroud)
步骤3-使用==或elementsEqual比较
let isEqual = lhsArray == rhsArray
Run Code Online (Sandbox Code Playgroud)
要么
let isEqual = lhsArray.elementsEqual(rhsArray, by: { $0 == $1} )
Run Code Online (Sandbox Code Playgroud)
方法2(没有平等协议)
步骤1-按方法1,步骤2中所述对数组进行排序
第2步-使用elementsEqual
lhsArray.elementsEqual(rhsArray, by: { $0.identifier == $1.identifier })
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您有一些参数需要比较,可以使用此方法:
let difference = currentObjects
.filter({ currentObject in
!(newObjects
.contains(where: { $0.identifier == currentObject.identifier }))
})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17744 次 |
最近记录: |