symmetricDifference 的通用数组扩展
Generic Array Extension for symmetricDifference
我写了这个函数来获取两个字符串数组之间的差异。
func difference<T:Hashable>(array1: [T] ,array2:[T]) ->[T]? {
let set1 = Set<T>(array1)
let set2 = Set<T>(array2)
let intersection = set1.symmetricDifference(set2)
return Array(intersection)
}
现在我想将它扩展为不同类型的通用函数,例如 Int
、Double
等...
extension Array where Element: Hashable {
func difference<T:Hashable>(array2: [T]) -> [T] {
let set1 = Set(self)
let set2 = Set(array2)
let intersection = set1.symmetricDifference(set2)
return Array(intersection)
}
}
使用此扩展程序时,出现错误:
Generic parameter 'S' could not be inferred.
我尝试了不同的方法但没有成功。
可能是什么问题?
正如@Hamish 在他上面的评论中提到的那样,您正在用一种类型扩展 Array
并尝试用另一种类型 (T: Hashable
) 执行 symmetricDifference
编译器无法推断。
您可以修复它返回一个 [Element]
并使用与函数中的参数相同的类型,如下所示:
extension Array where Element: Hashable {
func difference(array2: [Element]) -> [Element] {
let set1 = Set(self)
let set2 = Set(array2)
let intersection = set1.symmetricDifference(set2)
return Array(intersection)
}
}
希望对你有所帮助。
我写了这个函数来获取两个字符串数组之间的差异。
func difference<T:Hashable>(array1: [T] ,array2:[T]) ->[T]? {
let set1 = Set<T>(array1)
let set2 = Set<T>(array2)
let intersection = set1.symmetricDifference(set2)
return Array(intersection)
}
现在我想将它扩展为不同类型的通用函数,例如 Int
、Double
等...
extension Array where Element: Hashable {
func difference<T:Hashable>(array2: [T]) -> [T] {
let set1 = Set(self)
let set2 = Set(array2)
let intersection = set1.symmetricDifference(set2)
return Array(intersection)
}
}
使用此扩展程序时,出现错误:
Generic parameter 'S' could not be inferred.
我尝试了不同的方法但没有成功。 可能是什么问题?
正如@Hamish 在他上面的评论中提到的那样,您正在用一种类型扩展 Array
并尝试用另一种类型 (T: Hashable
) 执行 symmetricDifference
编译器无法推断。
您可以修复它返回一个 [Element]
并使用与函数中的参数相同的类型,如下所示:
extension Array where Element: Hashable {
func difference(array2: [Element]) -> [Element] {
let set1 = Set(self)
let set2 = Set(array2)
let intersection = set1.symmetricDifference(set2)
return Array(intersection)
}
}
希望对你有所帮助。