我可以描述爲關係修剪孩子「擁有」過濾內容的數組:斯威夫特從給定父
Factory -< Engine
玩家只需要他擁有engines
參考;
即:
Player: { name: "Bob", engines: [Engine]() }
我希望過濾對某個球員是否能負擔得起的工廠廠房;但我也想過濾出玩家已經擁有的所有引擎。
也就是說,
玩家永遠只能購買每個工廠一次。
..
我的代碼過濾掉實惠的工廠是這樣的:
let results = factories.filter { (factory:Factory) -> Bool in
return ((factory.cost <= Int(firstPlayer.cash)) && (factory.isUnlocked))
}
我的代碼過濾引擎,一個玩家擁有,對於一個給定父工廠
let ownedEngines = player.engines.filter { (eng:Engine) -> Bool in
return ((eng.owner == player) && (eng.parent == factory))
}
但是我怎麼把他們結合起來說呢;
給我一份我還沒有的工廠清單,我可以負擔得起嗎?
非常感謝
編輯:類概述遵循
class Factory {
var name: String
var cost: Int
var engines: [Engine] = [Engine]()
}
class Engine {
var name: String
weak var parent: Factory?
weak var owner: Player?
var units: Int
}
class Player {
var name: String
var cash: Int
var engines: [Engine] = [Engine]()
}
更多信息
我可以形容,那就是最好的方法;
這個遊戲代表了幾個收集在[deck]中的工廠。 每個deck
都有多張卡片;這些是發動機。 每個玩家不能多次購買相同的工廠。
我需要多少units
和其他元數據爲子對象的引用,因此這就是爲什麼有一個Engine
實體。
所以當一個玩家購買一個工廠時,他們實際上購買了一臺發動機並且從不直接擁有該工廠。所有引用都可以從子對象中收集。
我需要過濾掉:
- 我,我能買得起
- 我已經擁有的所有工廠通過我的引擎卡的所有工廠的
decks
所以我做這種方式目前;
// static Function in my factory model
public static func filterDecksForCash(decks: [Factory], cash:Int) -> [Factory] {
let results = decks.filter { (f:Factory) -> Bool in
return ((loco.cost <= Int(cash)) && (loco.isUnlocked))
}
return results
}
let decks = Factory.createAll()
// filter deck for cost, unlock but also all trains but also remove trains they've already purchased
var results = Factory.filterDecksForCash(decks: decks, cash: firstPlayer.cash)
for (index, factory) in results.enumerated() {
for eng in factory.engines {
if (eng.owner == firstPlayer) {
results.remove(at: index)
}
}
}
請添加您的類實現。 – JuicyFruit
爲什麼這些類會導入?我所做的只是過濾數組。無論如何,我會添加基本的刪除不重要的信息。 – zardon
這聽起來像你要求的所有*引擎*,你還沒有擁有以及所有*工廠*,你可以負擔的清單。或者你是否自動擁有作爲你所擁有引擎的父母的工廠? –