Rust 如何在不使用克隆的情况下迭代向量并比较元素以防止借用错误
这是我的工作代码,其中Rust 如何在不使用克隆的情况下迭代向量并比较元素以防止借用错误,rust,Rust,这是我的工作代码,其中things是Vec 在比较此处的值时,我将用于iter而不是iter:tx.id==tx\u父项 上述方法有效,但只是因为我首先克隆了向量,这对我来说并不理想。有没有更好的方法来实现我的目标?没有克隆人 上述代码的目的是检查元素是否按特定顺序排列。使用,而不是,前者返回迭代器,通过借用现有向量对其进行迭代,后者使用数据-获得对象的所有权,并直接将其转换为迭代器,这不是您想要的。使用,而不是,前者返回迭代器,该迭代器通过借用现有向量对其进行迭代,后者消耗数据-获得对象的所有
things
是Vec
在比较此处的值时,我将用于iter
而不是iter
:tx.id==tx\u父项
上述方法有效,但只是因为我首先克隆了向量,这对我来说并不理想。有没有更好的方法来实现我的目标?没有克隆人
上述代码的目的是检查元素是否按特定顺序排列。使用,而不是,前者返回迭代器,通过借用现有向量对其进行迭代,后者使用数据-获得对象的所有权,并直接将其转换为迭代器,这不是您想要的。使用,而不是,前者返回迭代器,该迭代器通过借用现有向量对其进行迭代,后者消耗数据-获得对象的所有权,并直接将其转换为迭代器,这不是您想要的。Hi here!你能提供一份详细的报告吗?这使得回答这个问题更容易。在这里创建最简单的示例应该不是很难。谢谢你好!你能提供一份详细的报告吗?这使得回答这个问题更容易。在这里创建最简单的示例应该不是很难。谢谢@谢谢,但我的问题是value是一个引用(&[u8;32]),tx.id不是([u8;32])。如果我写&tx.id==value会自动检查值吗?当你匹配引用时,你应该使用
&value
,当你想取消引用某个东西时,你应该使用*
取消引用它,你不清楚你的问题是什么,因为你没有告诉我们什么是tx,所以我无法回答你的问题,但是,例如,要将值匹配为普通的[u8;32]
,您可以这样迭代:for things.iter().enumerate(){…}
这就是所谓的引用模式:@jamesmith我将为条件编写tx.id==*value
,这适用于非复制类型。(=
运算符通过引用隐式获取其参数,因此在此上下文中*value
不会移出value
)@Sahsahe谢谢,但我的问题是value是引用(&[u8;32]),tx.id不是([u8;32])。如果我写&tx.id==value会自动检查值吗?当你匹配引用时,你应该使用&value
,当你想取消引用某个东西时,你应该使用*
取消引用它,你不清楚你的问题是什么,因为你没有告诉我们什么是tx,所以我无法回答你的问题,但是,例如,要将值匹配为普通的[u8;32]
,您可以这样迭代:for things.iter().enumerate(){…}
这就是所谓的引用模式:@jamesmith我将为条件编写tx.id==*value
,这适用于非复制类型。(==
运算符通过隐式引用获取其参数,因此在此上下文中*value
不会移出value
)
let t_copy = tx.things.clone();
for (index, value) in tx.things.into_iter().enumerate() {
if tx.id == value {
return Err(CustomError);
}
if t_copy[index].max(t_copy[index+1]) == t_copy[index] {
return Err(CustomError);
}
}