Rust 使用不推荐的项目';std::ascii::AsciiExt';:改用固有的方法

Rust 使用不推荐的项目';std::ascii::AsciiExt';:改用固有的方法,rust,Rust,这是我写的 let somestring = "hello happy haddock hahaha".to_string(); let mut freq: HashMap<char, u32> = HashMap::new(); for c in somestring.chars() {

这是我写的

let somestring = "hello happy haddock hahaha".to_string();
let mut freq: HashMap<char, u32> = HashMap::new();
for c in somestring.chars() {                                                                                       
    let c = AsciiExt::to_ascii_lowercase(&c);
    *freq.entry(c).or_insert(0) += 1;
}
下面的转换在没有警告的情况下工作,但是比
到\u ascii\u lowercase()
慢得多

让c=c.to_lowercase().collect::()[0];
我在
somestring
变量中只有ASCII字母。我应该如何将它们转换为小写

谢谢你回答这个问题!这里是代码的链接


如消息所述,使用固有方法(例如,而不是特征方法:

使用std::collections::HashMap;
fn main(){
让somestring=“你好,快乐的黑线鳕,哈哈哈”。到_string();
让mut freq:HashMap=HashMap::new();
对于somestring.chars()中的c{
设c=c.to_ascii_lowercase();
*频率输入(c)或插入(0)+=1;
}
}

如消息所述,使用固有方法(例如,而不是特征方法:

使用std::collections::HashMap;
fn main(){
让somestring=“你好,快乐的黑线鳕,哈哈哈”。到_string();
让mut freq:HashMap=HashMap::new();
对于somestring.chars()中的c{
设c=c.to_ascii_lowercase();
*频率输入(c)或插入(0)+=1;
}
}

删除
使用std::ascii:AsciiExt;


自v1.23.0以来一直保持稳定。

删除
使用std::ascii:AsciiExt;


自v1.23.0以来一直保持稳定。

您可以使用
char::to_ascii\u lowercase
并利用
somestring.chars()返回迭代器的事实:

use std::collections::HashMap;

fn main() {
    let somestring = "hello happy haddock hahaha".to_string();
    let mut freq: HashMap<char, u32> = HashMap::new();
    for c in somestring.chars().map(|ch: char| ch.to_ascii_lowercase()) {
        *freq.entry(c).or_insert(0) += 1;
    }

    println!("{:?}", freq)
}

您可以使用
char::来使用ascii\u小写
并利用
somestring.chars()
返回迭代器的事实:

use std::collections::HashMap;

fn main() {
    let somestring = "hello happy haddock hahaha".to_string();
    let mut freq: HashMap<char, u32> = HashMap::new();
    for c in somestring.chars().map(|ch: char| ch.to_ascii_lowercase()) {
        *freq.entry(c).or_insert(0) += 1;
    }

    println!("{:?}", freq)
}

在提供的代码中没有
使用std::ascii:AsciiExt
行。是的,我基于在
src/main.rs:2:5
的源代码中报告它的警告来回答。在提供的代码中没有
使用std::ascii:AsciiExt
行。是的,我基于在
src/m的源代码中报告它的警告来回答ain.rs:2:5
。很难回答您的问题,因为它不包含一个。我们无法说出是什么板条箱(及其版本),类型、特征、字段等都存在于代码中。如果您试图在上重现错误,我们将更容易为您提供帮助。如果可能的话,否则在全新的货运项目中,则您的问题将包括其他信息。您可以使用这些信息来减少您在此处发布的原始代码。谢谢!已经给出了答案低。原因
到_lowercase().collect::>()[0]
较慢(如您所说)你是在对构成原始字符的小写版本的字符进行迭代,将所有字符收集到一个Vec中,然后获取该Vec中的第一个字符。这是一个很大的工作。这也是错误的:正如
to_lowercase
的文档所说,unicode字符在其小写表示中可能需要多个字符。如果您知道您正在处理ascii(提示:真的吗?真的吗?),您可以使用
来_ascii_lowercase
。很难回答您的问题,因为它不包含。我们无法说出是什么板条箱(及其版本),类型、特征、字段等都存在于代码中。如果您试图在上重现错误,我们将更容易为您提供帮助。如果可能的话,否则在全新的货运项目中,则您的问题将包括其他信息。您可以使用这些信息来减少您在此处发布的原始代码。谢谢!已经给出了答案低。原因
到_lowercase().collect::>()[0]
较慢(如您所说)你是在对构成原始字符的小写版本的字符进行迭代,将所有字符收集到一个Vec中,然后获取该Vec中的第一个字符。这是一个很大的工作。这也是错误的:正如
to_lowercase
的文档所说,unicode字符在其小写表示中可能需要多个字符。如果您知道您正在处理ascii(提示:真的吗?真的吗?),您可以使用
来_ascii_lowercase