例如,对于
let n = count_unique_grapheme_clusters(" ");
println!("{}", n);
Run Code Online (Sandbox Code Playgroud)
预期输出是(空间和三个标志:" ","","",""):
4
Run Code Online (Sandbox Code Playgroud)
我们可以使用unicode-segmentation crate中的graphemes方法迭代字形集群并将它们保存在a中以过滤掉重复项.然后我们得到了容器.HashSet<&str>.len()
extern crate unicode_segmentation; // 1.2.1
use std::collections::HashSet;
use unicode_segmentation::UnicodeSegmentation;
fn count_unique_grapheme_clusters(s: &str) -> usize {
let is_extended = true;
s.graphemes(is_extended).collect::<HashSet<_>>().len()
}
fn main() {
assert_eq!(count_unique_grapheme_clusters(""), 0);
assert_eq!(count_unique_grapheme_clusters("a"), 1);
assert_eq!(count_unique_grapheme_clusters(""), 1);
assert_eq!(count_unique_grapheme_clusters("e?"), 2);
assert_eq!(count_unique_grapheme_clusters(""), 3);
}
Run Code Online (Sandbox Code Playgroud)