nekolib/algo/ordered_hash_.rs
1//! 座標圧縮。
2
3use std::collections::{BTreeMap, BTreeSet};
4
5/// 座標圧縮。
6///
7/// # Examples
8/// ```
9/// use nekolib::algo::ordered_hash;
10///
11/// let oh = ordered_hash(&[0, 1, 3, 1, 5]);
12/// assert_eq!(oh.len(), 4);
13/// assert_eq!(oh[&0], 0);
14/// assert_eq!(oh[&1], 1);
15/// assert_eq!(oh[&3], 2);
16/// assert_eq!(oh[&5], 3);
17/// ```
18pub fn ordered_hash<'a, K: Ord>(buf: &'a [K]) -> BTreeMap<&'a K, usize> {
19 let set: BTreeSet<_> = buf.iter().collect();
20 set.into_iter().zip(0..).collect()
21}