Java 如何在枚举上迭代,将其插入向量,然后在向量中洗牌?
我正在编写代码来初始化52张牌并洗牌。在Java中,我使用一个ArrayList并遍历suite枚举和Rank枚举,同时添加一个Cardsuit,Rank对象。然后我使用Collections.shuffle 我正在尝试使用向量和结构将此代码移植到Rust。问题是我不能像在Java中那样迭代枚举。达到这个结果的惯用方法是什么 我曾尝试导入strum&strum_宏以获得enum迭代,但我一直在尝试将结构推送到Vec上,然后随机洗牌 Java代码 公务舱甲板{ 私有列表Java 如何在枚举上迭代,将其插入向量,然后在向量中洗牌?,java,rust,Java,Rust,我正在编写代码来初始化52张牌并洗牌。在Java中,我使用一个ArrayList并遍历suite枚举和Rank枚举,同时添加一个Cardsuit,Rank对象。然后我使用Collections.shuffle 我正在尝试使用向量和结构将此代码移植到Rust。问题是我不能像在Java中那样迭代枚举。达到这个结果的惯用方法是什么 我曾尝试导入strum&strum_宏以获得enum迭代,但我一直在尝试将结构推送到Vec上,然后随机洗牌 Java代码 公务舱甲板{ 私有列表aCards=newarra
[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中一样。唯一的区别是有些方法不是来自结构,而是来自Rust中的接口,这些方法称为trait,您必须导入它们才能使用它们