Quiero llenar mi matriz 2D con un par de elementos de matriz. Sin embargo, solo puedo descubrir cómo agregar una matriz después de la otra. Lo que realmente quiero es crear una nueva matriz dentro de mi matriz 2D que contiene ciertos elementos de la matriz simple. Me gusta esto:

// resultado requerido myServerInfos = [["www.apple.com", "error", "sin datos"] ["www.google.com", "error", "sin datos"] ["www.amazon.com "," error "," sin datos "] [" www.bla.com "," error "," sin datos "]]

Estas son mis matrices:

swift 4

var myServerInfos = [[String]]()

let pings = ["www.apple.com", "www.google.com", "www.amazon.com", "www.bla.com"]
var statusImagesMain = ["error", "error", "error", "error"]
var serverStatusMain = ["no data", "no data", "no data", "no data"]

Sé que puedo acceder al primer elemento de la matriz a través de "pings.first" y sé que debo recorrer cada una de las cuatro matrices, guardar cada uno de los elementos en una nueva matriz y luego agregarlos a myServerInfos. Simplemente no puedo entender cómo hacerlo concretamente.

1
Jake2Finn 9 sep. 2018 a las 21:30

3 respuestas

La mejor respuesta

Puedes probar

let myServerInfos = (0..<pings.count).map{ 
  [pings[$0],statusImagesMain[$0],serverStatusMain[$0]] 
}

Seguro que todos deben ser del mismo tamaño

1
Sh_Khan 9 sep. 2018 a las 18:39

En caso de que esté buscando un código que se lea como su texto:

var myServerInfos = [[String]]()

let pings = ["www.apple.com", "www.google.com", "www.amazon.com", "www.bla.com"]
var statusImagesMain = ["error", "error", "error", "error"]
var serverStatusMain = ["no data", "no data", "no data", "no data"]

for i in 0 ..< pings.count {
    // one liner version
    let na = [ pings[i], statusImagesMain[i], serverStatusMain[i] ]

    /* shows append use for pushing items.
    var na = [String]()        
    na.append(pings[i])
    na.append(statusImagesMain[i])
    na.append(serverStatusMain[i])
    */

    // push array in
    myServerInfos.append(na)
}
0
nycynik 9 sep. 2018 a las 18:57

zip() es útil para iterar dos matrices (o más generalmente, secuencias) en paralelo. Actualmente no hay una función zip correspondiente que tome más de 2 secuencias, pero con llamadas zip() anidadas puede obtener el resultado requerido con

let myServerInfos = zip(zip(pings, statusImagesMain), serverStatusMain).map {
    [$0.0, $0.1, $1]
}
0
Martin R 9 sep. 2018 a las 18:44