如何计算Rust中字符串中的唯一字形簇?

ozk*_*iff 5 unicode rust

例如,对于

let n = count_unique_grapheme_clusters("    ");
println!("{}", n);
Run Code Online (Sandbox Code Playgroud)

预期输出是(空间和三个标志:" ","","",""):

4
Run Code Online (Sandbox Code Playgroud)

ozk*_*iff 6

我们可以使用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)

操场

  • 如果您想回答自己的问题,可以勾选问题问题页面底部的"回答您自己的问题"复选框,以便您可以立即写下您的问题和答案. (5认同)