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());