заполнить 2d массив строками в особом порядке - PullRequest
0 голосов
/ 09 сентября 2018

Я хочу заполнить мой 2d массив парой элементов массива. Однако я могу только выяснить, как добавить один массив за другим. На самом деле я хочу создать новый массив в моем 2d массиве, который содержит определенные элементы из простого массива. как это:

// обязательный результат myServerInfos = [["www.apple.com", "error", "no данные "] [" www.google.com "," ошибка "," нет данных "] [" www.amazon.com ", «ошибка», «нет данных»] [«www.bla.com», «ошибка», «нет данных»]]

Это мои массивы:

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"]

Я знаю, что могу получить доступ к первому элементу массива через "pings.first", и я знаю, что должен пройтись по каждому из четырех массивов, сохранить каждый из элементов в новом массиве и затем добавить их в myServerInfos. Я просто не могу понять, как это сделать конкретно.

Ответы [ 3 ]

0 голосов
/ 09 сентября 2018

zip() полезно для итерации двух массивов (или, в более общем случае, последовательностей) параллельно.В настоящее время нет соответствующей zip-функции, которая принимает более 2 последовательностей, но с вложенными вызовами zip() вы можете получить требуемый результат с помощью

let myServerInfos = zip(zip(pings, statusImagesMain), serverStatusMain).map {
    [$0.0, $0.1, $1]
}
0 голосов
/ 09 сентября 2018

Если вы ищете код, который читается как ваш текст:

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 голосов
/ 09 сентября 2018

Вы можете попробовать

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

уверен, что все должны быть одинакового размера

...