在swift中创建独特的数组[Int]数组

时间:2016-12-28 08:28:31

标签: arrays swift

所以,我有循环,我得到[Int]并且Array可能只有一个元素,可能有几个元素。那些数组可能是相同的,也可能不同。

我想创建Array唯一的数组[Int]。怎么做?当我尝试按Set创建时,我看到了

  

[Int] not hashable

我的代码:

for i in 0..<someData.count {

      someData?[i].db.value(forKey: "value") as! [Int] // here I get [Int]

      //here I'd like to create an array of unique arrays from from the line above
     }

2 个答案:

答案 0 :(得分:1)

var values:[Int] = [] {
    didSet{
        var uniqueValues = [Int]()
        var addedValues = Set<Int>()
        for value in values {
            if !addedValues.contains(value) {
                addedValues.insert(value)
                uniqueValues.append(value)
            }
        }
        values = uniqueValues
    }
}

values是你的数组,它只包含唯一的值。希望这就是你要找的。

答案 1 :(得分:1)

您也可以实现自己的Hashable数组

import Foundation

internal struct HashableIntArray: Hashable {
    var value: [Int]
    var hashValue: Int { return value.reduce(0, +).hashValue }
}

internal func == (lhs:HashableIntArray,rhs: HashableIntArray) -> Bool {
    return lhs.value == rhs.value
}

let array = [HashableIntArray(value: [1,1,2]), HashableIntArray(value: [1,2,2]), HashableIntArray(value: [1,1,2])]

let set = Set(array)
print(array) // [HashableIntArray(value: [1, 1, 2]), HashableIntArray(value: [1, 2, 2]), HashableIntArray(value: [1, 1, 2])]
print(set) // [HashableIntArray(value: [1, 2, 2]), HashableIntArray(value: [1, 1, 2])]