4 ms·
> as dicts are essentially sets with values attached. Interestingly enough some languages actually do the opposite. In Rust for example a set is literally just
by Sean1708 8y ago
> as dicts are essentially sets with values attached.
Interestingly enough some languages actually do the opposite. In Rust for example a set is literally just a dictionary with unit as the value[0] and unit is essentially a way of expressing the absence of a value (it takes up no space in memory, and you just can't do anything with it).
[0]: https://doc.rust-lang.org/stable/src/std/collections/hash/set.rs.html#111-113 https://doc.rust-lang.org/stable/src/std/collections/hash/se...
For posterity, the above link shows:
pub struct HashSet<T, S = RandomState> {
map: HashMap<T, (), S>,
}
- cube2222 8y agoSame as Go, where everybody just uses map[Key]struct{} as sets.
- bpicolo 8y agoTo be fair, this is because the language does not support a type safe set type. I would use one frequently if it did
- majewsky 8y agomap[T]struct{} is a type-safe set type. It's just not an ergonomic one. FWIW, I'm usually using map[T]bool and only ever inserting `true` values. It uses a bit more space, but membership checks read like if set[key] { instead of if _, ok := set[key]; ok {
- kbd 8y ago> Interestingly enough some languages actually do the opposite. Of course you can represent sets as dictionaries with empty values (ask anyone who programmed Perl). You're supporting my point that dicts logically subclass sets, because they can represent sets where the values can be other things as well. You're also getting at what the behavior should be if you union a dictionary and a set. Hypothetical Python: >>> s = {'a','b','c'} >>> d = {'d': 'D'} >>> d | s >>> {'d': 'D', 'a': None, 'b': None, 'c': None}
- meatball-farmer 8y agoI think he's flipping your point: sets are a subclass of dicts/maps, not vice-versa. Thinking of a maps as a set where it's value maps to something else sounds backwards because values in sets don't map to values arbitrarily (or at all in some cases); maps are maps.
- deleted 8y ago[deleted]
- zephyrfalcon 8y agoBefore Python grew a set type, it was common to implement them in a similar way, i.e. as a dict with some kind of default value (0, 1, None, etc).
- kevin_thibedeau 8y agoPython sets are internally just a dict hash table for the keys with no associated values.
- sqd 8y agoI think internally C++ STL set<T> is similarly just map<T, void>