Questo è stato risolto in Swift 4
let data = ["a": 0, "b": 42]
let filtered = data.filter { $0.value > 10 }
print(filtered) // ["b": 42]
a Swift 4, un dizionario filtrato restituisce un dizionario.
risposta originale per Swift 2 e 3
Il problema è che data
è un dizionario, ma il risultato di filter
è un array, in modo che il messaggio di errore dice che non è possibile assegnare il risultato di quest'ultimo al primo.
Si potrebbe semplicemente creare una nuova variabile/costante per l'array risultante:
let data: [String: String] = [:]
let filtered = data.filter { $0.1 == "Test" }
Qui filtered
è un array di tuple: [(String, String)]
.
Una volta filtrato, è possibile ricreare un nuovo dizionario, se questo è quello che vi serve:
var newData = [String:String]()
for result in filtered {
newData[result.0] = result.1
}
Se si decide di non utilizzare filter
si potrebbe mutare il dizionario originale o una copia di esso:
var data = ["a":"Test", "b":"nope"]
for (key, value) in data {
if value != "Test" {
data.removeValueForKey(key)
}
}
print(data) // ["a": "Test"]
Nota: in Swift 3, removeValueForKey
è stato rinominato removeValue(forKey:)
, quindi in questo esempio diventa data.removeValue(forKey: key)
.
okay grazie :) questo è semplicemente stupido da apple secondo me. Quando filtro un dizionario mi aspetto un dizionario in cambio ... Ho cambiato il mio codice per essere un array e utilizzare una struttura combinata per includere sia la chiave che il valore (in modo che non sono obbligato a usare le chiavi stringa) e Io uso di nuovo la funzione filtro, poiché questo è l'approccio più conciso. – warly
Qualcuno sa perché Dictionary.filter non restituisce un dizionario? Sono curioso. – Tylerc230
@warly vedi la risposta di Eendje sotto. È una risposta diversa – Honey