我可以从具有重复数字的数组中获取一组唯一数字
let arrayWithReapeats = [1, 2, 3, 7, 3]
let unique = Array(Set(arrayWithReapeats))
我需要一个具有唯一范围的数组
Range<String.Index>
来自具有重复范围的数组,例如像这样。
let arrayWithReapeatsIdexes = [1..<5, 3..<9, 9..<25, 3..<9]
我不能对Set使用相同的方法,因为默认情况下只有String,Int,Double和Bool可以使用。如何使范围可以使用上述方法?
答案 0 :(得分:2)
哈希值的仅要求是
x == y
暗示x.hashValue == y.hashValue
表示“普通”哈希函数
extension Range : Hashable {
public var hashValue: Int {
return 0
}
}
有效且有效:
let arrayWithRepeatingIndexes = [1..<5, 3..<9, 9..<25, 3..<9]
let arrayWithUniqueIndexes = Array(Set(arrayWithRepeatingIndexes))
print(arrayWithUniqueIndexes)
// [Range(1..<5), Range(3..<9), Range(9..<25)]
您也可以使用距离从头到尾的事实 index是一个整数类型(因此有一个哈希值):
public var hashValue: Int {
return startIndex.distanceTo(endIndex).hashValue
}
或从描述字符串计算哈希值(例如“3 ..&lt; 9”):
public var hashValue: Int {
return description.hashValue
}
你必须弄清楚哪一个对你的目的最有效。
答案 1 :(得分:1)
试试这个:
extension SequenceType where Generator.Element: Equatable {
func unique() -> [Generator.Element] {
var seen: Array<Generator.Element> = []
return filter {
if seen.contains($0){
return false
} else {
seen.append($0)
return true
}
}
}
}