【发布时间】:2018-08-15 01:47:15
【问题描述】:
我有一个结构向量,我将向量中的每个元素与其他所有元素进行比较,并且在某些情况下会改变当前元素。
我的问题是你不能同时发生可变和不可变借用,但我不确定如何在不克隆当前元素或整个向量的情况下重新构建我的问题以解决这个问题,这似乎是一种浪费,因为我只对当前元素进行了变异,并且不需要将其与自身进行比较(我跳过了这种情况)。
我确信在 Rust 中有一种惯用的方式来做到这一点。
struct MyStruct {
a: i32,
}
fn main() {
let mut v = vec![MyStruct { a: 1 }, MyStruct { a: 2 }, MyStruct { a: 3 }];
for elem in v.iter_mut() {
for other_elem in v.iter() {
if other_elem.a > elem.a {
elem.a += 1;
}
}
}
}
【问题讨论】:
-
了解您当前如何尝试构建代码可能会有所帮助。这似乎非常可行。
-
我添加了一个例子。我偶然发现了this quesion,这让我认为 split_at_mut 或类似的东西可能是解决方案。
-
您基本上是在尝试访问切片的所有对。奇怪的是,我发现没有板条箱可以做到这一点。
-
@Boiethios
itertools::iproduct会这样做...当然不会解决可变性问题。 -
@kazemakase 仅供参考,我为此做了一个迭代器:gitlab.com/snippets/1702560 也许我会为这样的工具创建一个。
标签: rust