我正在尝试计算单词出现在文本中的次数。我正在使用HashMap
而我的实现忽略了大小写。我通过将所有单词转换为小写来实现这一目标:
for line in reader.lines() {
for mut curr in line.as_ref().unwrap().split_whitespace() {
match word_map.entry(curr.to_string().to_lowercase()) {
Entry::Occupied(entry) => {
*entry.into_mut() += 1;
}
Entry::Vacant(entry) => {
entry.insert(1);
}
}
}
}
我想将“the”和“The”视为相同,但如果“the”不出现,只需在HashMap
中按住“The”即可。现在,我把所有的单词都用小写字母表示。有没有有效的方法来做到这一点?
答案 0 :(得分:1)
最简单的方法是使用UniCase
作为密钥:
extern crate unicase;
type Words = std::collections::HashMap<UniCase, u32>;
如果我理解他们的文档,UniCase::new("The")
会在其中存储实际的字符串"The"
,但如果将其与Unicase::new("the")
进行比较,您会看到它是相同的字符串。