У меня есть два массива из веб-службы, мне нужно выяснить, имеют ли Array2 те же объекты, что и Array1. Итак, для этого я использую ниже код:
var arr1 = [CustomObject]()
var arr2 = [CustomObject]()
var arr3 = [CustomObject]()
var arr4 = [CustomObject]()
self.arr3 = self.arr1 + self.arr2 //concatenate two arrays
self.arr4 = Array(Set(arr3)) // find out uniq values
// below is the extension
extension Array where Element : Hashable {
var unique: [Element] {
var uniqueValues: [Element] = []
forEach { item in
if !uniqueValues.contains(item) {
uniqueValues += [item]
}
}
return uniqueValues
}
}
Но на этой строке отображается ошибка "Массив (Set (arr3))"
Ошибка: - для добавления значения в Set
Hashable
пользовательский класс/структуру, пользовательский класс/структура должен соответствовать protocol
Hashable
и косвенно Equatable
protocol
.struct
, и вы можете использовать класс.struct CustomObject : Hashable{
var something : Int //It is just an example, this could be any type, but some how you should find a way to compute the hash value.
//MARK: Hashable
var hashValue: Int {
return something
}
}
//MARK: CustomObject - Equatable
func ==(lhs: CustomObject, rhs: CustomObject) -> Bool {
return lhs.something == rhs.something
}
self.arr4 = Array(Set(arr3))
должен работать, просто делая CustomObject
Hashable
Попробуй это:
var arr1 = ["A","B","C"]
var arr2 = ["A","B","C"]
if Set(arr1).symmetricDifference(arr2).isEmpty {
print("The Arrays Match")
}
CustomObject
Hashable
?