如何在 Rust 中迭代和更改可变数组中的值? [英] How can you iterate and change the values in a mutable array in Rust?

查看:108
本文介绍了如何在 Rust 中迭代和更改可变数组中的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我走了多远:

#[derive(Copy, Clone, Debug)]
enum Suits {
    Hearts,
    Spades,
    Clubs,
    Diamonds,
}

#[derive(Copy, Clone, Debug)]
struct Card {
    card_num: u8,
    card_suit: Suits,
}

fn generate_deck() {
    let deck: [Option<Card>; 52] = [None; 52];

    for mut i in deck.iter() {
        i = &Some(Card {
            card_num: 1,
            card_suit: Suits::Hearts,
        });
    }

    for i in deck.iter() {
        println!("{:?}", i);
    }
}

fn main() {
    generate_deck();
}

它只打印出None.我的借款有问题吗?我做错了什么?

It only prints out None. Is there something wrong with my borrowing? What am I doing wrong?

推荐答案

首先,你的牌组是不可变的.请记住,rust 绑定默认是不可变的:

First, your deck is not mutable. Remember in rust bindings are non-mutable by default:

let mut deck: [Option<Card>; 52] = [None; 52];

接下来,要获得可以修改的迭代器,请使用iter_mut():

Next, to obtain an iterator you can modify, you use iter_mut():

for i in deck.iter_mut() {

最后:循环中的i 是对deck 元素的可变引用.要将某些内容分配给引用,您需要取消引用它:

Finally: the i that you have in your loop is a mutable reference to the elements of deck. To assign something to the reference, you need to dereference it:

*i = Some(Card {
    card_num: 1,
    card_suit: Suits::Hearts,
});

游乐场链接

这篇关于如何在 Rust 中迭代和更改可变数组中的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆