首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在锈蚀条件下获得可变切片

如何在锈蚀条件下获得可变切片
EN

Stack Overflow用户
提问于 2019-11-20 09:55:47
回答 2查看 361关注 0票数 3

我想在Rust中用下面的代码编写类似的代码。

代码语言:javascript
复制
fn main() {
    let mut v: Vec<i64> = vec![1, 2, 3, 4, 5];
    let mut s: Vec<&mut i64> = v
        .iter_mut()
        .filter(|val| **val < 2_i64)
        .collect();
    if s.len() == 0 {
        s = v
            .iter_mut()
            .filter(|val| **val > 2_i64)
            .collect();
    }
    *s[0] = 0;
    println!("{:?}", v);
}

很明显是借了两次债。我知道这会导致一个错误,E0384: cannot assign twice to immutable variable s cannot assign twice to immutable variable

你能告诉我如何用铁锈写这种工作流程吗?我想过滤值,如果它什么也不返回,应用另一个过滤器并获得借用参考的Vec

我试着使用共享引用。过滤Vec后,我需要将共享引用转换为借用引用,但这是不可能的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-20 10:01:28

你可以写这样的东西。我同意它并不是真的很漂亮,但它很有效:

代码语言:javascript
复制
fn main() {
    let mut v = vec![1_i64, 2, 3, 4, 5];
    let s: Vec<_> = v.iter_mut().filter(|&val| *val < 2).collect();
    let mut s = if s.len() == 0 {
        v.iter_mut().filter(|&val| *val > 2).collect()
    } else {
        s
    };

    *s[0] = 0;
    println!("{:?}", v);
}
票数 2
EN

Stack Overflow用户

发布于 2019-11-20 10:41:56

我们可以像这样复制引用:

代码语言:javascript
复制
fn main() {
    let mut v: Vec<i64> = vec![1, 2, 3, 4, 5];
    let mut t = v.clone();
    let mut s: Vec<&mut i64> = v.iter_mut().filter(|val| **val < 2_i64).collect();
    if s.len() == 0 {
        s = t.iter_mut().filter(|val| **val > 2_i64).collect();
    }
    *s[0] = 0;
    println!("{:?}", v);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58951421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档