MCPcopy Create free account
hub / github.com/daniel-e/rustml / group

Function group

src/vectors.rs:246–263  ·  view source on GitHub ↗

Counts and compresses consecutive elements that are equal. # Example ``` use rustml::vectors::*; let a = vec![1, 1, 2, 3, 3, 3, 3, 5, 5, 3]; assert_eq!( group(&a), vec![(1, 2), (2, 1), (3, 4), (5, 2), (3, 1)] ); ```

(v: &Vec<T>)

Source from the content-addressed store, hash-verified

244/// );
245/// ```
246pub fn group<T: PartialEq + Clone>(v: &Vec<T>) -> Vec<(T, usize)> {
247
248 let mut r: Vec<(T, usize)> = Vec::new();
249 for val in v {
250 if r.len() == 0 {
251 r.push((val.clone(), 1));
252 } else {
253 let mut x = r.pop().unwrap();
254 if x.0 != *val {
255 r.push(x);
256 x = (val.clone(), 0);
257 }
258 x.1 += 1;
259 r.push(x);
260 }
261 }
262 r
263}
264
265// ------------------------------------------------------------------
266

Callers 2

test_groupFunction · 0.85
classifyFunction · 0.85

Calls 1

lenMethod · 0.45

Tested by 1

test_groupFunction · 0.68