The正しい解決策は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" }
この回答は、他の回答と比較して多くの設定のようですが、&の足跡は、ここで年齢は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