辞書[String: [Object]]
があります。各オブジェクトには.name
値が配列のフィルタ辞書
辞書には.filter
を使用して、フィルタリングされた値を含むキーのみで辞書を返すことはできますか?
辞書[String: [Object]]
があります。各オブジェクトには.name
値が配列のフィルタ辞書
辞書には.filter
を使用して、フィルタリングされた値を含むキーのみで辞書を返すことはできますか?
を私はあなたの質問を理解していれば、あなたは各Object
がname
プロパティおよびこれを持っている[String: [Object]]
辞書のキーをしたいですプロパティには指定された値があります。 flatMap
とcontains
とfilter
let filteredKeys = dict.filter { (key, value) in value.contains({ $0.name == "two" }) }.map { $0.0 }
print(filteredKeys)
ソリューションと
ソリューション:さて、あなたは、オブジェクトがその名前に "2" を持っている辞書のキーにしたいとしましょう
struct Obj {
let name: String
}
let o1 = Obj(name: "one")
let o2 = Obj(name: "two")
let o3 = Obj(name: "three")
let dict = ["a": [o1, o2], "b": [o3]]
let filteredKeys = dict.flatMap { (str, arr) -> String? in
if arr.contains({ $0.name == "two" }) {
return str
}
return nil
}
print(filteredKeys)
ループを備えたソリューション
var filteredKeys = [String]()
for (key, value) in dict {
if value.contains({ $0.name == "two" }) {
filteredKeys.append(key)
}
}
print(filteredKeys)
はい、しかし、あなたが値として配列で辞書を得たので:
ありがとう!私は検索文字列filteredCityStations.filter({$ 0.1.filter({$ 0.タイトルを!])でフィルターしようとしましたが、私の型がBoolに変換できないと訴えています。 –
@AlexeyK、EricDが正しいです。最初のフィルタはflatMapでなければなりません。答えを編集しました。 –
それは本当に素晴らしい完璧な答えです!どうもありがとう! –
あなたは大歓迎です! :) ありがとう。 – Moritz