RS.CLIPPY.ITER_OVER_HASH_TYPE
Iterating over unordered hash-based types (`HashMap` and `HashSet`)
This checker is a Clippy lint created by The Rust Project Contributors. The documentation shown here is a copy of the original documentation for: iter_over_hash_type. Copyright ©2025 The Rust Team. All rights reserved.
What it does
This is a restriction lint which prevents the use of hash types (i.e., HashSet and HashMap) in for loops.
Why restrict this?
Because hash types are unordered, when iterated through such as in a for loop, the values are returned in
an undefined order. As a result, on redundant systems this may cause inconsistencies and anomalies.
In addition, the unknown order of the elements may reduce readability or introduce other undesired
side effects.
Example
let my_map = std::collections::HashMap::<i32, String>::new();
for (key, value) in my_map { /* ... */ }
Use instead:
let my_map = std::collections::HashMap::<i32, String>::new();
let mut keys = my_map.keys().clone().collect::<Vec<_>>();
keys.sort();
for key in keys {
let value = &my_map[key];
}