Как вывести 2D-массив из двух 1D-массивов?

#swift #xcode

#быстрый #в Xcode

Вопрос:

У меня есть два массива, из которых мне нужно вывести 2D-массив:

 let id = productArrays.map { $0.productID }=["2", "2"]
let quant = productArrays.map { $0.quantity }=["3", "4"]
var array = [[Int]]()
        for i in 0..<productArrays.count {
            var subArray = quant
            for j in 0..<productArrays.count {
                subArray[i]![j] = quant
            }
            array.append(subArray)
        }
}
  

Мне нужно вывести вот так:

 [[3, 2],[4, 2]]
  

Комментарии:

1. сообщите о характере проблемы, с которой вы столкнулись

2. Не могли бы вы показать нам, что productArrays содержит изначально, какую-то структуру или?

3. опубликуйте, пожалуйста, исходные два массива

4. Идентификатор исходного массива = [«2», «2»] и квантовать = [«3», «4»]

5. Мне нужно сделать 2D массив следующим образом [[«2″,»3»],[«2″,»4»]

Ответ №1:

 let id = ["2", "2"]
let quant = ["3", "4"]
let result = Array(zip(id, quant))
  

Комментарии:

1. Это создает массив с двумя кортежами

Ответ №2:

Обновление, решение для использования zip

 let array = zip(id, quant).map {[$0.0, $0.1]}
  

или, если вы предпочитаете, чтобы массив содержал целые числа

 let array = zip(id, quant).map {[Int($0.0) ?? 0, Int($0.1) ?? 0]}
  

Вот простое решение для объединения и преобразования элементов массива

 let id = ["2", "2"]
let quant = ["3", "4"]

var array = [[Int]]()

let end = min(id.count, quant.count)
for i in 0..<end {
    if let id = Int(id[i]), let quant = Int(quant[i]) {
        array.append([id, quant])
    }
}
  

Поскольку вопрос содержит map в массиве, я хотел включить альтернативное решение на случай, если исходные данные содержатся в некоторой структуре (в массиве), поскольку такое решение довольно простое

 struct Item { //My made up struct
    let id: String
    let quant: String
}

let productArray = [Item(id: "2", quant: "3"), Item(id: "2", quant: "4")]

let array2 = productArray.compactMap { item -> [Int]? in
    if let id = Int(item.id), let quant = Int(item.quant) {
        return [id, quant]
    }
    return nil
}
  

Комментарии:

1. @ShahedAboSaleem Я обновил свой ответ правильным решением для использования zip , которое дает вам желаемый 2D-массив.