【问题标题】:Efficiently check each item in a vec against other and also mutate [duplicate]有效地检查 vec 中的每个项目与其他项目并进行变异 [重复]
【发布时间】:2020-10-29 14:33:13
【问题描述】:

如何有效地循环遍历 Vec,将每个项目相互比较并在需要时进行变异?现在我有:

let s_len = s.len();
for i in 0..s_len - 1 {
     for j in i + 1..s_len { 
        // Perform a lot of checks and assignments, eg s[i].x = s[j].y or s[j].z = s[i].x
   }
}

但是,我读到这样做更有效:

if let Some(a) = s.get_mut(i) {
    ...
}

显然,由于借用检查器,我不能在两者上都这样做。关于如何加快速度的任何想法?

【问题讨论】:

标签: rust


【解决方案1】:

get_mut 并不比索引快 - 它不会惊慌,而是会给你一个选择。

您使用的索引解决方案基本上是您所能获得的性能。 Rust 执行边界检查会降低性能,但这不应该是主要因素。索引允许您在没有借用问题的情况下进行变异。

您可以通过使用迭代器和拆分向量来避免边界检查,如here 所述。虽然这比索引更复杂一些,但可以说也更安全,甚至可能性能更好,因为您避免了边界检查。

【讨论】:

    猜你喜欢
    • 2019-01-10
    • 2011-06-27
    • 1970-01-01
    • 2016-07-07
    • 2020-10-16
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多