itertools

External link: https://docs.rs/itertools/latest/itertools/

Библиотека работы с итераторами

Sorting() a string of letters (with rev() - reverse order)

use itertools::Itertools;

let text = "Hello world";
let text_sorted = text.chars().sorted().rev().collect::<String>();
// rev() - Iterate the iterable in reverse
   
println!("Text: {}, Sorted Text: {}", text, text_sorted); 
// Text: Hello world, Sorted Text: wroollledH 

Counts() подсчёт количества одинаковых элементов в Array

use itertools::Itertools;

let number_list = [1,12,3,1,5,2,7,8,7,8,2,3,12,7,7];
let mode = number_list.iter().counts(); // Itertools::counts() 
// возвращает Hashmap, где ключи взяты из массива, значения - частота
for (key, value) in &mode {  
    println!("Число {key} встречается {value} раз");  
 } 

По сути counts() заменяет собой конструкцию:

let mut number_count: HashMap<u32, u32> = HashMap::new();
for c in number_list {
  *number_count.entry(c).or_insert(0) += 1; 
  }

Duplicates_by()

Можно получить итератор с повторяющимися элементами:

println!("{:?}",number_list.iter().duplicates_by(|x| *x)
.collect::<Vec<&u32>>()
// [2, 3, 6]

Тогда подсчёт количества одинаковых элементов:

println!("{:?}", number_list.iter().duplicates_by(|x| *x).count());