Rust 循环文件,索引字符

Rust 循环文件,索引字符,rust,Rust,我是新生锈的。 我想得到在a之后有a的概率,在a之后有b的概率,等等…… 我正在尝试获取一个HashMap,比如: { a : { a: 0, b: 2, c: 1, ... }, b: { ... } 这是我的密码: 使用std::collections::HashMap; 使用std::fs::File; 使用std::io::BufRead; 使用std::{fs,io}; fn main(){ 让mut letters_repatit

我是新生锈的。
我想得到在a之后有a的概率,在a之后有b的概率,等等……
我正在尝试获取一个
HashMap
,比如:

{
  a : {
    a: 0,
    b: 2,
    c: 1,
    ...
  },
  b: {
    ...
}
这是我的密码:

使用std::collections::HashMap;
使用std::fs::File;
使用std::io::BufRead;
使用std::{fs,io};
fn main(){
让mut letters_repatition:HashMap=HashMap::new();
//获取所有文件,并循环到其中
如果让Ok(read_dir)=fs::read_dir(“resources/”){
如果让Ok(文件路径)=读取目录
.map(| res | res.map(| e | e.path()))
收集::()
{
用于文件中的路径\u路径{
//获取内容文件
如果让Ok(文件)=文件::打开(路径){
让buf_lines=io::BufReader::new(file.lines();
//循环遍历文件的行
对于buf_线中的buf_线{
如果让Ok(多行)=buf_行{
如果line.len()大于0{
行=格式!(“{:}”,行);
//文件行上的循环
对于0中的i..(line.len()-2){
//获取索引字母
如果让一些(当前字母)=行获取(i..i+1){
//获取索引+1个字母
如果let Some(下一个字母)=line.get(i+1..i+2){
//芬多尔创造了一封信
让子字母重复=字母重复
.条目(当前字母)
.或_insert(HashMap::new());
//findOrCreate子数组项
让字母计数=子字母重复
.条目(下一个字母)
.或_插入(0);
//递增下一个字母计数器
*字母计数+=1;
}
}
}
}
}
}
}
}
}
}
println!(“{:?}”,字母重复);
}
我得到一个错误:

$cargo run
编译书籍\u解析器v0.1.0(~\rust项目)
错误[E0597]:`line`的寿命不够长
-->src\main.rs:27:67
|
27 |如果让一些(当前字母)=行获取(i..i+1){
|^^^^借来的价值活得不够长
...
46 |                         }
|-‘line’在这里还借着
...
53 | println!(“{:?}”,字母重复);
|---------借来以后在这里使用
错误:由于上一个错误而中止
有关此错误的详细信息,请尝试“rustc--explain E0597”。
错误:无法编译`book\u解析器`


如何使用提取字符串的字母作为我的
HashMap

感谢@tadman&@Jmb

我已经完成了我的脚本:

使用std::collections::HashMap;
使用std::fs::File;
使用std::io::BufRead;
使用std::{fs,io};
fn main(){
让mut letters_repatition:HashMap=HashMap::new();
//获取所有文件,并循环到其中
如果让Ok(read_dir)=fs::read_dir(“resources/”){
如果让Ok(文件路径)=读取目录
.map(| res | res.map(| e | e.path()))
收集::()
{
用于文件中的路径\u路径{
//获取内容文件
如果让Ok(文件)=文件::打开(路径){
让buf_lines=io::BufReader::new(file.lines();
//循环遍历文件的行
对于buf_线中的buf_线{
如果让Ok(多行)=buf_行{
如果line.len()大于0{
行=格式!(“{:}”,行);
设chars=line.chars();
让mut previous_char='';
//循环文件字符
对于当前字符,以字符为单位{
//芬多尔创造了一封信
让子字母重复=字母重复
.条目(上一个字符)
.或_insert(HashMap::new());
//findOrCreate子数组项
让字母计数=子字母重复
.条目(当前字符)
.或_插入(0);
//递增下一个字母计数器
*字母计数+=1;
上一个字符=当前字符;
}
}
}
}
}
}
}
}
println!(“{:?}”,字母重复);
}

can
let line=format!(“{:}”,第行)
在此处生成新变量帮助?使用
HashMap
(或者,如果您只有ASCII字符,请使用数组
[[u128;128];128]
)。您可能还希望使用
chars()
迭代器,而不是使用
get()
四处乱动。顺便说一句:
u128
在这里可能是杀伤力过大
u64
可以存储您实际遇到的任何计数,并且应该更快。谢谢,我将使用
let