【问题标题】:Collect into owned vec of owned strings in rust收集到 rust 中拥有的字符串的拥有的 vec
【发布时间】:2014-09-01 14:11:09
【问题描述】:

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

let fields : ~[~str] = row.split_str(",").collect();

我收到以下错误:预期 std::iter::FromIterator,但找到 std::iter::FromIterator(str 存储不同:预期 & 但找到 ~

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

【问题讨论】:

  • 你使用的是什么版本的 Rust?

标签: rust rust-obsolete


【解决方案1】:

.split_str 返回一个iterator over &str slices,即返回row 数据的子视图。借用的&str 不是拥有的~str:要完成这项工作,要么收集到~[&str],要么在收集之前将每个&str 复制到~str

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

FWIW,如果您要拆分单个字符谓词,那么 split 会更有效(例如,在这种情况下为 row.split(','))。

另外,我推荐你upgrade to a more recent version of Rust,最近发布了 0.11,但建议安装目标是 nightlies(在相应文档的上述文档链接中将 0.10 更改为 0.11master)。

对于 nightly,上面的两个 sn-ps 会写成:

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

(最后,如果您正在努力区分 &amp;str~str aka String, I wrote up some details a while ago。)

【讨论】:

  • 谢谢!是的,我现在正在升级和更改我的语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 2019-12-05
  • 1970-01-01
  • 2022-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多