繁体   English   中英

如何在 Swift 中使用数组值将多个数组合并为一个数组?

[英]how to merge several arrays into one array with array values in Swift?

如何在 Swift 中使用数组值将多个数组合并为一个数组?

var arr1 = ["1", "2", "3"]
var arr2 = ["a", "b", "c"]
var arr3 = ["aa", "bb", "cc"]

  [["1", "a", "aa"], ["2", "b", "bb"], ["1", "c", "cc"]]

我想你想要的是将三个数组组合成一个二维数组,然后转置它。

要转置二维数组,您可以在此问题中找到许多解决方案。

这在评论中使用了 Crashalot 的解决方案:

fileprivate func transpose<T>(input: [[T]]) -> [[T]] {
    if input.isEmpty { return [[T]]() }
    let count = input[0].count
    var out = [[T]](repeating: [T](), count: count)
    for outer in input {
        for (index, inner) in outer.enumerated() {
            out[index].append(inner)
        }
    }
    return out

}

var arr1 = ["1", "2", "3"]
var arr2 = ["a", "b", "c"]
var arr3 = ["aa", "bb", "cc"]

transpose(input: [arr1, arr2, arr3])

如果你想要一个更快速的transpose ,你可以使用这个(从这里修改):

extension Collection where Self.Element: RandomAccessCollection {
    func transposed() -> [[Self.Iterator.Element.Iterator.Element]]? {
        guard Set(self.map { $0.count }).count == 1 else { return nil }

        guard let firstRow = self.first else { return [] }
        return firstRow.indices.map { index in
            self.map{ $0[index] }
        }
    }
}

如果您愿意,这是一种天真的表达方式。

[arr1,arr2,arr3].reduce([[],[],[]]) { result, next -> [[String]] in
   return (0..<(next.count)).map{
         var array = Array.init(result[$0])
         array.append(next[$0]);
         return array
   }
}

或更直接:

[arr1,arr2,arr3].reduce(into: [[],[],[]]) { ( result : inout [[String]], next) in
 _ = (0..<(next.count)).map{ result[$0].append(next[$0]);}
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM