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

时间:2017-03-02 11:40:55

标签: swift

我可以使用什么函数编程-theh函数(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)
}

更新:大多数评论/答案都适合我提出的这个问题的第一个版本。现在,我用我的具体案例修改了它。

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

4 个答案:

答案 0 :(得分:3)

假设两个阵列都包含相同的元素......

let array2 = firstArray

答案 1 :(得分:3)

我无法测试我的代码,但可能就像......

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

    return UIImageView(image: image)
)

假设photoURL是URL数组。

答案 2 :(得分:1)

您可以尝试这样的事情:

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

答案 3 :(得分:0)

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