A variadic, FP-style, solution, that can pack an arbitrary number of arrays:
func pack<T>(_ arrays: [T]...) -> [[T]] {
guard !arrays.isEmpty else { return [] }
let minCount = arrays.map(\.count).min()!
return (0..<minCount).map { i in arrays.map { $0[i] } }
}
Usage:
let arr1 = ["1", "2", "3"]
let arr2 = ["a", "b", "c"]
let arr3 = ["aa", "bb", "cc"]
let result = pack(arr1, arr2, arr3)
// [["1", "a", "aa"], ["2", "b", "bb"], ["1", "c", "cc"]]
let anotherResult = pack(["firstName", "lastName"], ["John", "Doe"])
// [["firstName", "John"], ["lastName", "Doe"]]