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);
    }

}