是否有任何有效的方法将不区分大小写的字符串作为HashMap键?

时间:2017-12-14 12:15:17

标签: hashmap rust case-insensitive

我正在尝试计算单词出现在文本中的次数。我正在使用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”即可。现在,我把所有的单词都用小写字母表示。有没有有效的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用UniCase作为密钥:

extern crate unicase;

type Words = std::collections::HashMap<UniCase, u32>;

如果我理解他们的文档,UniCase::new("The")会在其中存储实际的字符串"The",但如果将其与Unicase::new("the")进行比较,您会看到它是相同的字符串。

相关问题