Swift: 将两个数组匹配成一个数组

4

我有两个数组

array1 = ["Fri","Sat","Sun"]
array2 = ["5","6","7"]

现在我想创建一个新的数组:["Fri5", "Sat6", "Sun7"]。如何实现?先谢谢了。
3个回答

7

如果采用函数式方法,请使用zipmap

let array1 = ["Fri","Sat","Sun"]
let array2 = ["5","6","7"]

let result = zip(array1, array2).map { $0 + $1 }
print(result)

输出:

["Fri5", "Sat6", "Sun7"]

zip 创建了一个元组的序列 [("Fri", "5"), ("Sat", "6"), ("Sun", "7")], 然后 map 将每个元组中的两个 String 组合成一个单独的 String,最终生成一个数组。


0

你也可以尝试这个:

var array1 = ["Fri","Sat","Sun"]
var array2 = ["5","6","7"]

var array3 = array1.map{ $0 + (array2[array1.indexOf($0)!]) } // ["Fri5", "Sat6", "Sun7"]

-1

使用Swift 5,您可以使用以下五个Playground示例代码之一来解决您的问题。


#1. 使用sequence(state:next:)

let array0 = ["Fri", "Sat", "Sun"]
let array1 = ["5", "6", "7"]

let unfoldSequence = sequence(state: (array0.makeIterator(), array1.makeIterator()), next: { (iterators) -> String? in
    guard let string0 = iterators.0.next(), let string1 = iterators.1.next() else { return nil }
    return string0 + string1
})

let array = Array(unfoldSequence)
print(array) // prints: ["Fri5", "Sat6", "Sun7"]

#2. 使用 zip(_:_:)map(_:)

let array0 = ["Fri", "Sat", "Sun"]
let array1 = ["5", "6", "7"]


let array = zip(array0, array1).map({ $0 + $1 })
print(array) // prints: ["Fri5", "Sat6", "Sun7"]

#3. 使用zip(_:_:)reduce(into:_:)

let array0 = ["Fri", "Sat", "Sun"]
let array1 = ["5", "6", "7"]

let array = zip(array0, array1).reduce(into: [String](), { (result, tuple) in
    result.append(tuple.0 + tuple.1)
})
print(array) // prints: ["Fri5", "Sat6", "Sun7"]

#4. 使用 AnyIterator

let array0 = ["Fri", "Sat", "Sun"]
let array1 = ["5", "6", "7"]

var iterator0 = array0.makeIterator()
var iterator1 = array1.makeIterator()

let anyIterator = AnyIterator<String> {
    guard let string0 = iterator0.next(), let string1 = iterator1.next() else { return nil }
    return string0 + string1
}

let array = Array(anyIterator)
print(array) // prints: ["Fri5", "Sat6", "Sun7"]

#5. 创建一个符合SequenceIteratorProtocol协议的对象

struct StringArrayConcatenatingSequence: Sequence, IteratorProtocol {

    let firstArray: [String]
    let secondArray: [String]
    private var index = 0

    init(firstArray: [String], secondArray: [String]) {
        self.firstArray = firstArray
        self.secondArray = secondArray
    }

    mutating func next() -> String? {
        guard index < Swift.min(firstArray.count, secondArray.count) else { return nil }
        defer { index += 1 }
        return firstArray[index] + secondArray[index]
    }

}

let array0 = ["Fri", "Sat", "Sun"]
let array1 = ["5", "6", "7"]

let sequence = StringArrayConcatenatingSequence(firstArray: array0, secondArray: array1)
let array = Array(sequence)
print(array) // prints: ["Fri5", "Sat6", "Sun7"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接