第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何迭代枚舉,將其插入向量,然后在 Rust 中對其進行打亂?

如何迭代枚舉,將其插入向量,然后在 Rust 中對其進行打亂?

慕哥9229398 2023-07-19 17:06:26
我正在編寫代碼來初始化一副包含 52 張牌的牌并對它們進行洗牌。在 Java 中,我使用 anArrayList并迭代枚舉Suit和Rank枚舉,并Card(suit,rank)在進行過程中添加一個對象。然后我用Collections.shuffle().我正在嘗試使用向量和結構將此代碼移植到 Rust。問題是我無法像 Java 中那樣迭代枚舉。Rust 嘗試實現(xiàn)此結果的慣用方法是什么?我曾嘗試導入 strum 和 strum_macros 來獲得枚舉迭代,但我一直試圖將結構推入其中Vec,然后隨機對其進行洗牌。Java代碼public class Deck {    private List < Card > aCards = new ArrayList < > ();    public Deck() {        shuffle();    }    public void shuffle() {        aCards.clear();        for (Suit suit: Suit.values()) {            for (Rank rank: Rank.values()) {                aCards.add(new Card(rank, suit));            }        }        Collections.shuffle(aCards);    }}生銹嘗試use crate::card::Card;use crate::rank::Rank;use crate::suit::Suit;use rand::{thread_rng, Rng};use strum::IntoEnumIterator;pub struct Deck {    cards: Vec<Card>,}impl Deck {    pub fn shuffle(&mut self) -> () {        self.cards.clear();        for s in Suit::iter() {            for r in Rank::iter() {                self.cards.push(Card::new(s, r));            }        }    }}花色的結構(等級相似)use strum_macros::*;#[derive(EnumIter, Debug)]pub enum Suit {    SPADES,    DIAMONDS,    CLUBS,    HEARTS,}卡結構pub struct Card {    suit: Suit,    rank: Rank,}impl Card {    pub fn new(psuit: Suit, prank: Rank) -> Card {        Card {            suit: psuit,            rank: prank,        }    }}我只想簡單地迭代兩組枚舉變體,然后重新排列輸出對,但這似乎要復雜得多!我懷疑也許有更好的方法?
查看完整描述

1 回答

?
墨色風雨

TA貢獻1853條經(jīng)驗 獲得超6個贊

關鍵點是:


將洗牌所需的特征納入范圍(SliceRandom對于 rand 版本 0.7)。

將所需類型納入范圍enum::iter()

貨物.toml:


[package]

name = "mcve"

version = "0.1.0"

authors = ["Svetlin Zarev <svetlin.zarev@xxx.com>"]

edition = "2018"


[dependencies]

strum = "0.15"

strum_macros = "0.15"

rand = "0.7.0"

main.rs:


use strum_macros::EnumIter; // etc.

use strum::IntoEnumIterator;

use rand::thread_rng;

use rand::seq::SliceRandom;


#[derive(Debug, Copy, Clone,EnumIter)]

enum Suit {

    DIAMONDS,

    HEARTS,

    CLUBS,

    SPADES,

}


#[derive(Debug, Copy, Clone, EnumIter)]

enum Rank {

    Ace,

    King,

    Queen,

    Jack,

}


#[derive(Debug)]

struct Card {

    suit: Suit,

    rank: Rank,

}


impl Card {

    fn new(suit: Suit, rank: Rank) -> Card {

        Card { suit, rank }

    }

}


fn main() {

    let mut cards = Vec::<Card>::new();


    for r in Rank::iter() {

        for s in Suit::iter() {

            cards.push(Card::new(s, r));

        }

    }


    let mut rng = thread_rng();

    cards.shuffle(&mut rng);


    println!("{:?}", cards);

}

正如您所看到的,這幾乎就像在 Java 中一樣。唯一的區(qū)別是,有些方法不是來自結構體,而是來自接口(在 Rust 中,這些方法稱為特征),您必須導入它們才能使用它們。


查看完整回答
反對 回復 2023-07-19
  • 1 回答
  • 0 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號