gpt4 book ai didi

rust - 如何惯用地迭代数组的一半并修改另一半的结构?

转载 作者:行者123 更新时间:2023-11-29 08:33:03 25 4
gpt4 key购买 nike

迭代(读取)向量的前半部分并根据前半部分更改向量后半部分的结构的惯用方法是什么?这很抽象,但一些算法可以归结为这个问题。我想用 Rust 编写这个简化的 C++ 示例:

for (var i = 0; i < vec.length; i++) {
for (var j = i + 1 ; j < vec.length; j++) {
if (f(vec[i], vec[j])) {
vec.splice(j, 1);
j--;
}
}
}

最佳答案

这个一般问题的惯用解决方案对于 Rust 和 C 是相同的,因为没有允许简化的约束。

我们需要使用索引,因为向量重新分配会使迭代器包含的引用无效。我们需要在每个循环中将索引与向量的当前长度进行比较,因为长度可以更改。因此,惯用的解决方案将如下所示:

let mut i = 0;
while i < v.len() {
let mut j = i + 1;
while j < v.len() {
if f(v[i], v[j]) {
v.splice(j, 1);
} else {
j += 1;
}
}
i += 1;
}

Playground link

虽然这段代码涵盖了一般情况,但很少有用。它没有捕获细节,这些细节通常是手头问题所固有的。反过来,编译器无法在编译时捕获任何错误。我不建议在不先考虑其他方法的情况下写这样的东西。

关于rust - 如何惯用地迭代数组的一半并修改另一半的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46321839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com