gpt4 book ai didi

ios - .append() 到自定义结构的集合

转载 作者:可可西里 更新时间:2023-11-01 02:15:49 25 4
gpt4 key购买 nike

我有一个自定义的结构,用于创建、洗牌和发牌。

struct Card {
let pip : Pip
let suit : Suit

var isFaceCard : Bool {
return pip.rawValue > 10
}

var color : CardColor {
return suit.color
}
}

其次,我有一个玩家字典,每个玩家都有一个卡片集合。

 var Players = ["Scott": [Card](), "Bob": [Card](), "John": [Card]()]

为了有效地从我已经洗牌的牌组发牌,我计划循环遍历玩家字典两次,每次发一张牌,就像现场发生的那样。

是否可以简单地将 Card 类型附加到 Card 集合中?我的尝试似乎没有奏效。 dCard 类型的洗牌 Deck(Collection)。

Players["Scott"].append(d.deal())

编辑1

通过为每个播放器使用结构,我添加了这个

struct Player {
let name : String
var cards : [Card]
}
var Players = [Player]()
Players.append(Player(name:"Scott"))

我是否必须在初始化时给玩家他们的“牌”,或者我可以稍后发牌吗?由于上面的代码会产生错误。

Players.append(Player(name:"Scott", cards: [Card]()))

以上是否正确?

最佳答案

直接回答:

如果玩家可以拥有一组纸牌,那么 Player 应该是一个结构体,并且该结构体应该包含一组纸牌作为属性。我建议在这里完全不要使用字典。

编辑后:

你走在正确的轨道上。

如果您自己为您的结构创建一个初始化器,您就不必在初始化时给玩家他们的卡片:

struct Player {
let name : String
var cards : [Card] = []

init(name: String) {
self.name = name
}
}

这样做会取消成员初始化器的自动生成,只有你的初始化器可用。

但是如果你想保留自动成员初始化器,你可以在初始化时传递一个空的卡片数组:

struct Player {
let name : String
var cards : [Card]
}

let joe = Player(name: "Joe", cards: [])

评论之后:

如果您将所有玩家都放在一个数组中,则可以使用带有闭包谓词的 indexOf 来获取特定玩家,例如:

struct Player {
let name : String
var cards : [Card] = []

init(name: String) {
self.name = name
}

func fold() {
print("\(name) just folded")
}
}

var players = [Player]()
players.append(Player(name: "Joe"))
players.append(Player(name: "Jane"))
players.append(Player(name: "Jack"))
players.append(Player(name: "Janice"))

if let janeIndex = players.indexOf({ $0.name == "Jane" }) {
players[janeIndex].fold()
}

假设您希望所有玩家弃牌,只有一个玩家弃牌,您可以使用 filter:

let notJack = players.filter { $0.name != "Jack" }
notJack.forEach { $0.fold() }

关于ios - .append() 到自定义结构的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38588634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com