Swift - 创建一个类似于哈希的类似于结构的结构

时间:2015-07-01 18:16:26

标签: swift generics

我正在尝试创建一个类似于哈希的元组对象,它可以容纳任何类型的对象以用作字典中的键。我在两个地方使用该结构,一次持有2个Int,一次持有一个double和前面提到的2个Int结构。

我目前的实施有点欺骗。我创建了一个结构Suple,它包含两个整数,并且是可清除的,然后是另一个结构Duple,它包含一个double和一个suple,并且是可清除的。这个工作,但我认为必须有一个更好,更清晰的方法来实现它。在搜索和搞乱泛型之后,我似乎无法让它工作,所以任何建议都会受到赞赏。

编辑:我的代码实际上看起来与Anton的EXCEPT几乎完全相同,因为在{x}之后的平等声明中。我没有意识到这是必要的,在添加之后,它现在有效!

1 个答案:

答案 0 :(得分:4)

这样的东西?

struct Duplet<A: Hashable, B: Hashable>: Hashable {
    let one: A
    let two: B

    var hashValue: Int {
        return one.hashValue ^ two.hashValue
    }

    init(_ one: A, _ two: B) {
        self.one = one
        self.two = two
    }
}

func ==<A, B> (lhs: Duplet<A, B>, rhs: Duplet<A, B>) -> Bool {
    return lhs.one == rhs.one && lhs.two == rhs.two
}

let a = Duplet<Int, Int>(4, 2)

a.one
a.two
a.hashValue

let b = Duplet<Double, Double>(1.0, 2.0)

b.one
b.two
b.hashValue

let c = Duplet<Int, Double>(4, 5.0)

c.one
c.two
c.hashValue