parent
a3319ee7cf
commit
1787ff3546
@ -0,0 +1,30 @@
|
|||||||
|
# refset - non-owning `HsahSet`
|
||||||
|
|
||||||
|
A hash-set analogue that does not own its data.
|
||||||
|
|
||||||
|
It can be used to "mark" items without the need to transfer ownership to the map
|
||||||
|
|
||||||
|
# Example use case
|
||||||
|
```rust
|
||||||
|
/// Process arguments while ignoring duplicates
|
||||||
|
fn process_args(args: impl IntoIterator<Item=String>) {
|
||||||
|
let mut same= HashRefSet::new();
|
||||||
|
for argument in args.into_iter()
|
||||||
|
{
|
||||||
|
if !same.insert(argument.as_str()) {
|
||||||
|
// Already processed this input, ignore
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//do work...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
# Serialisation support with `serde` crate
|
||||||
|
`HashRefSet` and `HashType` both implement `Serialize` and `Deserialize` from the `serde` crate if the `serde` feature is enabled. By default it is not.
|
||||||
|
|
||||||
|
# Drawbacks
|
||||||
|
Since the item is not inserted itself, we cannot use `Eq` to double check there was not a hash collision.
|
||||||
|
While the hashing algorithm used (Sha512) is extremely unlikely to produce collisions, especially for small data types, keep in mind that it is not infallible.
|
||||||
|
|
||||||
|
# License
|
||||||
|
MIT
|
Loading…
Reference in new issue