为什么选择 csv 而不是 excel
- Excel 是一个二进制文件,只能用 Microsoft Excel 文档
- Excel 导入数据时消耗更多的内存
- Csv 是纯文本格式
- 所以您应该转换一下
rust
// 需求:拿到title是Professor的人的姓名
const MOCK_DATA: &'static str = include_str!("dept_data.csv");
// 先声明包含vector的工具结构体
struct Names<'a> {
inner: Vec<&'a str>,
}
struct Titles<'a> {
inner: Vec<&'a str>,
}
// 创建结构体返回结果
#[derive(Debug)]
struct ProfessorInfo{
name: String,
title: String,
}
impl ProfessorInfo {
// 生成vec的方法
fn generate_vec(names: Names, titles: Titles) -> Vec<ProfessorInfo>{
let data = names.inner.iter().zip(titles.inner.iter());
let mut res_vec: Vec<ProfessorInfo> = Vec::new();
for (name, title) in data
.filter(|tuple_item|tuple_item.1.to_string().contains("Professor"))
.take(3)
{
let item = ProfessorInfo {
name: name.to_string(),
title: title.to_string(),
};
res_vec.push(item);
}
res_vec
}
}
fn main() {
// 从csv字符串中提取数据
let data: Vec<_> = MOCK_DATA.split('\n').skip(1).collect();
let names: Vec<_> = data.iter()
.filter_map(|line| line.split(',').nth(1))
.collect();
let names = Names { inner: names };
let titles: Vec<_> = data.iter()
.filter_map(|line| line.split(',').nth(4))
.collect();
let titles = Titles { inner: titles };
let back = ProfessorInfo::generate_vec(names, titles);
println!("{:?}", back);
}