【发布时间】:2018-08-13 08:50:57
【问题描述】:
例如,对于
let n = count_unique_grapheme_clusters("???????? ???????? ???????? ???????? ????????");
println!("{}", n);
预期的输出是(空格和三个标志:" "、"????????"、"????????"、"????????"):
4
【问题讨论】:
例如,对于
let n = count_unique_grapheme_clusters("???????? ???????? ???????? ???????? ????????");
println!("{}", n);
预期的输出是(空格和三个标志:" "、"????????"、"????????"、"????????"):
4
【问题讨论】:
我们可以使用unicode-segmentation crate 中的graphemes 方法迭代字素簇并将它们保存在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("??é"), 2);
assert_eq!(count_unique_grapheme_clusters("??????????"), 3);
}
【讨论】:
Answer your own question复选框,这样您就可以一次写出您的问题和答案。