收集到 rust 中拥有的字符串的拥有 vec

rdm*_*fee 3 rust rust-obsolete

我正在尝试使用以下方法将 Rust 中的字符串收集到一个 vec 中:

let fields : ~[~str] = row.split_str(",").collect();
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:预期 std::iter::FromIterator<&str>, but found std::iter::FromIterator<~str> (str storage differents: expected &but found ~)

我尝试使用类型提示但没有成功

huo*_*uon 5

.split_str返回slices 上迭代器&str,也就是说,它返回row数据的子视图。借来&str的不是拥有的~str:为了使这项工作,要么收集到 a ~[&str],要么在收集之前将每个复制&str到 a 中~str

let first: ~[&str] = row.split_str(",").collect();
let second: ~[~str] = row.split_str(",").map(|s| s.to_owned()).collect();
Run Code Online (Sandbox Code Playgroud)

FWIW,如果您在单字符谓词上进行拆分,那么split效率会更高(例如row.split(',')在这种情况下)。

此外,我建议您升级到更新的 Rust 版本,最近发布了 0.11,但 nightlies 是推荐的安装目标(更改0.100.11master相应文档的上述文档链接)。

对于 nightly,上面的两个片段将被写成:

let first: Vec<&str> = row.split(',').collect();
let second: Vec<String> = row.split(',').map(|s| s.to_string()).collect();
Run Code Online (Sandbox Code Playgroud)

(最后,如果你在&str~straka的区别中挣扎String我不久前写了一些细节。)