作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试解决this challenge以学习Rust。我在下面创建了自己的解决方案:
use std::io;
use std::vec::Vec;
use std::collections::HashSet;
fn main() {
let stdin = io::stdin();
let mut buffer = String::new();
let mut set = HashSet::new();
let req = ["byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid", "cid"];
let mut res: u32 = 0;
while stdin.read_line(&mut buffer).unwrap() > 0 {
if buffer == "\n" {
for r in req.iter() {
if set.contains(r) {
set.remove(r);
}
}
if (set.len() == req.len()) || (set.len() == 7 && !set.contains("cid")) {
res += 1;
}
} else {
if buffer.ends_with('\n') {
buffer.pop();
}
let inputs: Vec<&str> = buffer.split_whitespace().collect();
for key_val in inputs {
let kval: Vec<&str> = key_val.split(':').collect();
set.insert(kval[0]);
}
}
buffer.clear();
}
println!("{}", res);
}
当我尝试编译它时,编译器输出错误:
error[E0502]: cannot borrow `buffer` as mutable because it is also borrowed as immutable
if (set.len() == req.len()) || (set.len() == 7 && !set.contains("cid")) {
| --- immutable borrow later used here
...
28 | let inputs: Vec<&str> = buffer.split_whitespace().collect();
| ------ immutable borrow occurs here
...
37 | buffer.clear();
| ^^^^^^^^^^^^^^ mutable borrow occurs here
我已经通过使用这种样式解决了其他问题(在某处使用
&mut buffer
和
split
),而没有收到此错误。
最佳答案
查看您的set
变量的类型。您可以通过在set as ()
行之后写一个set.insert(...)
来获得它。您会看到以下错误消息:
non-primitive cast: `HashSet<&str>` as `()`
因此,您设置了对
str
的引用。但是这些引用文献住哪里。好吧,您的所有
str
最终都来自
buffer
,因此它们是对
buffer
内容的引用。如果允许您执行
buffer.clear()
,则所有这些引用都将失效。
set
中的引用不会无效。您可以使用`read String
中存储&str
而不是set
值。 set.insert(kval[0].to_owned());
有了该功能和一些其他小的修复程序,您的算法将进行编译(
playground)。
use std::io::Read;
let mut stdin = io::stdin();
let mut input = String::new();
stdin.read_to_string(&mut input).unwrap();
for buffer in input.lines() {
...
}
现在
buffer
是
&str
而不是
String
,但是
set
中的值的生存期将是循环外的
input
的生存期。您将需要进行一些较小的修复,尤其是在行尾检查中。
关于rust - 如何在不担心可变借贷的情况下拆分字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65200225/
我是一名优秀的程序员,十分优秀!