我正在编写代码来初始化一副包含 52 张牌的牌并对它们进行洗牌。在 Java 中,我使用 anArrayList并迭代枚举Suit和Rank枚举,并Card(suit,rank)在进行过程中添加一个对象。然后我用Collections.shuffle().
我正在尝试使用向量和结构将此代码移植到 Rust。问题是我无法像 Java 中那样迭代枚举。Rust 尝试实现此结果的惯用方法是什么?
我曾尝试导入 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,
}
}
}
我只想简单地迭代两组枚举变体,然后重新排列输出对,但这似乎要复杂得多!我怀疑也许有更好的方法?
墨色风雨
相关分类