的正確的解決方案似乎是t o創建一個結構(或類)Pet
並將所有這些信息整理到一個結構中,並構建一個包含這些值的數組或字典。
struct Pet {
let name: String
let type: String
let color: String
init(name: String, type: String, color: String) {
self.name = name
self.type = type
self.color = color
}
}
現在,讓我們來構建這些寵物的數組:
var goodPets = [Pet]()
for (petName, petType) in pets {
guard let petColor = petcolor[petName] else {
// Found this pet's type, but couldn't find its color. Can't add it.
continue
}
goodPets.append(Pet(name: petName, type: petType, color: petColor))
}
現在,我們已經填寫了goodPets
,拉出寵物的任何特定子集變得非常容易:
let redDogs = goodPets.filter { $0.type == "dog" && $0.color = "red" }
雖然這個答案看起來像很多設置& legwork與其他答案相比,主要advant這裏的年齡是,一旦我們建立goodPets
陣列,任何我們想舀寵物的方式最終會變得更有效率。而隨着我們增加寵物的財產數量,與其他答案相比,這變得越來越真實。
如果你寧願保存在一個字典繼續使用該名稱作爲關鍵字我們的模型對象,我們可以做到這一點爲好,但過濾看起來有點陌生。
構建字典看起來大多相同:
var goodPets = [String : Pet]()
for (petName, petType) in pets {
guard let petColor = petcolor[petName] else {
// Found this pet's type, but couldn't find its color. Can't add it.
continue
}
goodPets[petName] = (Pet(name: petName, type: petType, color: petColor))
}
但過濾器略有不同:
let redDogs = goodPets.filter { $0.1.type = "dog" && $0.1.color = "red" }
注意,在這兩種情況下,redDogs
有型[Pet]
,也就是說,一個Pet
值的數組。
使用對象可能比詞典更好。 – brimstone