[swift-evolution] Custom equality/hash for Sets

Maximilian Hünenberger m.huenenberger at me.com
Fri Feb 19 01:13:18 CST 2016

To me it seems like a future direction of the property behavior proposal.
There could be a behavior like "pointerEquatable" which is used as a transparent wrapper:

        bahavior pointerEquatable<Value: AnyObject> : Hashable {
                var value: Value

                var hashValue: Int {
                        // hash value from pointer
                // omitting get/set

        func == <T>(p1: pointerEquatable<T>, p2: pointerEquatable<T>) -> Bool {
                return p1.value === p2.value

        // possible usage
        let set: Set<pointerEquatable<MyClass>> = [MyClass(), MyClass()]

This solution could then be used for any type not only Sets.

Best regards
- Maximilian

> Am 18.02.2016 um 23:58 schrieb Jacob Bandes-Storch via swift-evolution <swift-evolution at swift.org>:
> Would it make sense for the standard library Set to provide variants (or parallel versions of the same data structure) that take custom hashValue/== implementations at init time (functions taking in Elements), rather than relying on Hashable/Comparable protocols?
> Use case: I want a set of objects that are compared for equality using === rather than ==. This doesn't seem possible today, using Set, without creating some sort of wrapper object.
> This particular case would be analogous to using NSHashTable with NSPointerFunctionsObjectPointerPersonality. (Maybe all I'm asking for is a Swiftier API for NSHashTable — including ArrayLiteralConvertible, using generics instead of UnsafePointer<Void>, etc.)
> Similarly, C++'s unordered_map and friends have template parameters specifying the hash function and equality comparator, which use std::hash and == by default.
> (Apologies if this has been discussed already; I haven't seen it.)
> Jacob
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160219/5ecf6eb3/attachment.html>

More information about the swift-evolution mailing list