Saltar al contenido

Swift: Cómo eliminar un null valor del diccionario?

Nuestro grupo de especialistas luego de días de investigación y recopilación de de datos, hallamos la solución, nuestro deseo es que todo este artículo sea de gran utilidad en tu plan.

rápido 5

Usar compactMapValues:

dictionary.compactMapValues  $0 

compactMapValues se ha introducido en Swift 5. Para obtener más información, consulte la propuesta de Swift SE-0218.

ejemplo con diccionario

let json = [
    "FirstName": "Anvar",
    "LastName": "Azizov",
    "Website": nil,
    "About": nil,
]

let result = json.compactMapValues  $0 
print(result) // ["FirstName": "Anvar", "LastName": "Azizov"]

Ejemplo que incluye análisis JSON

let jsonText = """
  
    "FirstName": "Anvar",
    "LastName": "Azizov",
    "Website": null,
    "About": null
  
  """

let data = jsonText.data(using: .utf8)!
let json = try? JSONSerialization.jsonObject(with: data, options: [])
if let json = json as? [String: Any?] 
    let result = json.compactMapValues  $0 
    print(result) // ["FirstName": "Anvar", "LastName": "Azizov"]

rápido 4

Yo lo haría combinando filter con mapValues:

dictionary.filter  $0.value != nil .mapValues  $0! 

Ejemplos

Use los ejemplos anteriores simplemente reemplace let result con

let result = json.filter  $0.value != nil .mapValues  $0! 

Puedes crear un array que contiene el keys cuyos valores correspondientes son nulos:

let keysToRemove = dict.keys.array.filter  dict[$0]! == nil 

y luego recorrer todos los elementos de ese array y quitar el keys del diccionario:

for key in keysToRemove 
    dict.removeValueForKey(key)


Actualización 2017.01.17

El operador de desenvoltura de fuerza es un poco feo, aunque seguro, como se explica en los comentarios. Probablemente hay varias otras formas de lograr el mismo resultado, una forma más atractiva del mismo método es:

let keysToRemove = dict.keys.filter 
  guard let value = dict[$0] else  return false 
  return value == nil

Terminé con esto en rápido 2:

extension Dictionary where Value: AnyObject 

    var nullsRemoved: [Key: Value] 
        let tup = filter  !($0.1 is NSNull) 
        return tup.reduce([Key: Value]())  (var r, e) in r[e.0] = e.1; return r 
    

Misma respuesta pero para rápido 3:

extension Dictionary 

    /// An immutable version of update. Returns a new dictionary containing self's values and the key/value passed in.
    func updatedValue(_ value: Value, forKey key: Key) -> Dictionary 
        var result = self
        result[key] = value
        return result
    

    var nullsRemoved: [Key: Value] 
        let tup = filter  !($0.1 is NSNull) 
        return tup.reduce([Key: Value]())  $0.0.updatedValue($0.1.value, forKey: $0.1.key) 
    

Las cosas se vuelven mucho más fáciles en rápido 4. Solo usa el diccionario filter directamente.

jsonResult.filter  !($0.1 is NSNull) 

O si no desea eliminar el relevante keys, Puedes hacerlo:

jsonResult.mapValues  $0 is NSNull ? nil : $0 

que reemplazará a la NSNull valores con nil en lugar de quitar el keys.

Más adelante puedes encontrar las observaciones de otros usuarios, tú todavía tienes la opción de mostrar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *