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