String 如何将字符串转换为Rust中的字符串数组/向量
我有一个CSV文件中的字符串,其中包含多行: 编辑实际的绳子上没有锈。 我正在尝试将这些内容推入一个String 如何将字符串转换为Rust中的字符串数组/向量,string,vector,rust,String,Vector,Rust,我有一个CSV文件中的字符串,其中包含多行: 编辑实际的绳子上没有锈。 我正在尝试将这些内容推入一个Vec: 但是我得到了错误 错误[E0282]:无法推断有关的足够类型信息`_` -->src/main.rs:9:13 | 9 | let values=trimmed.split(',').collect(); |^^^^^无法推断的类型`_` | =注意:需要类型批注或泛型参数绑定 您需要给编译器一点提示,说明您希望值是什么 你可以说你希望它是某物的向量: let值:Vec=trimmed.
Vec
:
但是我得到了错误
错误[E0282]:无法推断有关的足够类型信息`_`
-->src/main.rs:9:13
|
9 | let values=trimmed.split(',').collect();
|^^^^^无法推断的类型`_`
|
=注意:需要类型批注或泛型参数绑定
您需要给编译器一点提示,说明您希望值是什么
你可以说你希望它是某物的向量:
let值:Vec=trimmed.split(',').collect();
如果您感兴趣,可以提供一些关于代码的其他说明
- 变量名应为
snake\u case
。因此,向量应称为main\u-vec
和child\u-vec
- 将
子对象推送到主对象时,不需要克隆它。将其推到main_-vec
会转移所有权,循环会重新声明子_-vec
,因此编译器可以保证此处没有违反任何内容
您需要给编译器一点提示,说明您希望值是什么
你可以说你希望它是某物的向量:
let值:Vec=trimmed.split(',').collect();
如果您感兴趣,可以提供一些关于代码的其他说明
- 变量名应为
snake\u case
。因此,向量应称为main\u-vec
和child\u-vec
- 将
子对象推送到主对象时,不需要克隆它。将其推到main_-vec
会转移所有权,循环会重新声明子_-vec
,因此编译器可以保证此处没有违反任何内容
,基于迭代器:
fn main() {
let raw_string = r"rust
header1,header2,header3
r1v1,r1v2,r1v3
r2v1,r2v2,r2v3";
let main_vec = raw_string.lines()
.map(|s| s.trim().split(',').map(String::from).collect::<Vec<String>>())
.collect::<Vec<Vec<String>>>();
print!("{:?}", main_vec);
}
有关更多信息,请参阅基于迭代器的。:
fn main() {
let raw_string = r"rust
header1,header2,header3
r1v1,r1v2,r1v3
r2v1,r2v2,r2v3";
let main_vec = raw_string.lines()
.map(|s| s.trim().split(',').map(String::from).collect::<Vec<String>>())
.collect::<Vec<Vec<String>>>();
print!("{:?}", main_vec);
}
有关更多信息,请参阅。您真的想要Vec
?o_O@ildjarn由于OP是“试图推送到一个Vec
”,似乎他们想要一个Vec
(两个Vec
,而不是三个)。@user4815162342:啊,不知怎的,我错过了这一点。也就是说,摆脱childVec应该是答案的一部分。@ildjarn不,你完全正确,对此感到抱歉。OP确实需要一个<代码> VEC<代码>,但是它们的代码是用一个不必要的一个元素向量在中间创建一个<代码> VEC <代码>。真正的答案是使用,因为解析CSV比每个人都想的要难。你真的想要一个<代码> VEC < /代码>?o_O@ildjarn由于OP是“试图推送到一个Vec
”,似乎他们想要一个Vec
(两个Vec
,而不是三个)。@user4815162342:啊,不知怎的,我错过了这一点。也就是说,摆脱childVec应该是答案的一部分。@ildjarn不,你完全正确,对此感到抱歉。OP确实需要一个<代码> VEC < /代码>,但是它们的代码在中间创建了一个不必要的一个元素向量。真正的答案是使用,因为解析CSV比每个人都想的要难。OP需要一个<代码> VEC < /代码>而不是<代码> VEC < /代码>,所以在<代码>分裂< /代码>之后,应该有一个<代码>地图。(String::from)
或诸如此类的方法。@ildjarn这似乎是我的问题,我找不出正确的位置来放置String::from()
或.to_String()
方法。@mjwrazor:维克托最后有什么,再加上拆分后的.map(String::from)
:.map(| | s | s.trim().split(',')。map.)(String::from.collect::())
(其他选项可用,例如.map(|s | s.trim().split(',')).map(ToString::to_String.collect:())
,但我认为使用from
读起来最好。)OP想要一个Vec
而不是Vec
,所以在拆分之后应该有一个.map(String::from)
或诸如此类的方法。@ildjarn这似乎是我的问题,我找不出正确的位置来放置String::from()
或.to_String()
方法。@mjwrazor:Victor在末尾有什么,加上拆分后的.map(String::from)
:.map(| s | s.trim().split(',').map(String::from).collect:())
(其他选项可用,例如.map(|s | s.trim().split(',')).map(ToString::to_string)。collect:())
,但我认为使用From
读取效果最好。)此解决方案也有效。此解决方案也有效。
let values: Vec<_> = trimmed.split(',').collect();
fn main() {
let raw_string = r"rust
header1,header2,header3
r1v1,r1v2,r1v3
r2v1,r2v2,r2v3";
let main_vec = raw_string.lines()
.map(|s| s.trim().split(',').map(String::from).collect::<Vec<String>>())
.collect::<Vec<Vec<String>>>();
print!("{:?}", main_vec);
}
let main_vec = raw_string.lines()
.map(|s| s.trim().split(',').map(String::from).collect::<Vec<_>>())
.collect::<Vec<_>>();