Swift 使用函数式编程将一个数组映射到另一个数组

Swift 使用函数式编程将一个数组映射到另一个数组,swift,Swift,我可以使用什么函数编程ish function map、reduce、zip来替换此for循环的功能?数组具有不同的对象,但元素数相同 @IBOutlet var imageViews: [UIImageView]! photoURLs = ["http://...photo1...", "http://...photo2...", "http://...photo3..."] for (index, photo) in photoURLs.enumerated() { imageVi

我可以使用什么函数编程ish function map、reduce、zip来替换此for循环的功能?数组具有不同的对象,但元素数相同

@IBOutlet var imageViews: [UIImageView]!
photoURLs = ["http://...photo1...", "http://...photo2...", "http://...photo3..."]

for (index, photo) in photoURLs.enumerated() {
    imageViews[index].setImageFromString(string: photo.urlString)
}
更新:大多数评论/答案都适用于我所问问题的第一个版本。现在,我用我的具体案例修改了它


关于重复问题:这个问题不涉及组合两个数组,它指的是将值从一个数组复制到另一个数组,完全相同的索引,但也通过自定义方法进行复制。

假设两个数组应该包含相同的元素

let flatMappedNumbers = firstArray.flatMap { $0 }
print(flatMappedNumbers)
let array2 = firstArray

您可以尝试以下方法:

zip(imageViews, photoURLs)
    .forEach { $0.setImageFromString(string: $1.urlString) }
有关详细示例:

let views = ["View0", "View1", "View2"]
let urls = ["url0", "url1", "url2"]

zip(views, urls)
    .forEach { print("View: \($0), URL: \($1)") }

// Result: 
View: View0, URL: url0
View: View1, URL: url1
View: View2, URL: url2

我无法测试我的代码,但可能是

self.imageViews = photoURLs.map()
{ 
    guard let data = NSData(contentsOf: $0), let image = UIImage(data: data)
    {
        return UIImageView(image: nil)
    }

    return UIImageView(image: image)
)

假设photoURLs是一个URL数组。

为什么在这里使用flatMap?它忽略了nil。如果OP需要保留他的nil呢?让flatMappedNumbers=firstArray.map{$0}@BohdanSavych,wut?如果我用Int->Int函数映射说[Int],我会神奇地得到[Int?]或什么?@Adolfo-请将你的评论作为答案发布。这是正确的答案!你不是说array2aka ImageView是空的吗?若您试图使用空数组下标的结果调用方法,那个么您的时间将非常糟糕。@Teodor Ciuraru您可以发布实际代码而不是伪代码吗?包括您希望调用@TeodorCiuraru的数组可能副本元素的函数,imageViews[index],其中imageViews=[]即使不是零也会导致崩溃,因此您将度过一段不愉快的时光。这是我之前所问问题的正确答案。非常感谢。但我发现我的问题比这复杂了一点,于是我更新了这个问题。这是我想要的正确答案。谢谢不客气!这是苹果公司的参考资料:。谢谢,阿道夫。非常感谢。你们帮我满足了我的好奇心。