Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何从具有重复范围的阵列中获取具有唯一范围的阵列?_Arrays_Swift_Set_Range_Hashable - Fatal编程技术网

Arrays 如何从具有重复范围的阵列中获取具有唯一范围的阵列?

Arrays 如何从具有重复范围的阵列中获取具有唯一范围的阵列?,arrays,swift,set,range,hashable,Arrays,Swift,Set,Range,Hashable,我可以从具有重复数字的数组中获得唯一数字的数组 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] 让arrayWi

我可以从具有重复数字的数组中获得唯一数字的数组

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]
让arrayWithReapeatsIdexes=[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
        }
    }
    }
}
Generator.Element所在的扩展序列类型:equalable{
func unique()->[Generator.Element]{
变量:数组=[]
回流过滤器{
如果看到。包含($0){
返回错误
}否则{
seen.append($0)
返回真值
}
}
}
}
哈希值的唯一要求是

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)]

或者从描述字符串计算哈希值(例如“3..谢谢!如果无法使用Set,我将尝试。我也尝试过使用NSRanges数组而不是Ranges类型的数组,它不能使用NSRange而不是扩展中的Range-NSRange不符合协议等式。我应该更改什么?(我应该作为一个新问题问这个问题吗?@VYT这意味着您必须为NSRange实现
=
public var hashValue: Int {
    return startIndex.distanceTo(endIndex).hashValue
}
public var hashValue: Int {
    return description.hashValue
}