Bir qatorni boshqasiga ajratish uchun funktsional dasturlardan foydalanish

for funktsiyasini o'zgartirish uchun qanday funktsional dasturiy-ish funktsiyasini (map, reduce, zip) foydalanishi mumkin? (Array turli elementlarga ega, lekin bir xil elementlar soni)

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

for (index, photo) in photoURLs.enumerated() {
    imageViews[index].setImageFromString(string: photo.urlString)
}

Yangilash: Fikr/javoblarning aksariyati men bergan savolning birinchi versiyasiga mos keladi. Endi men buni aniq ish bilan o'zgartirdim.

Ikki nusxadagi savolga kelsak: Bu savol ikki qatorni birlashtirishga taalluqli emas, bu qiymatlarni bir qatordan ikkinchi, bir xil indekslarga nusxalash, shuningdek ularni maxsus usul yordamida kiritish.

2
@Adolfo - javob sifatida javob yozing. Bu to'g'rilash javobidir!
qo'shib qo'ydi muallif Grimxn, manba
@Grimxn Postga javob yozing! ;)
qo'shib qo'ydi muallif Adolfo, manba
@Grimxn Postga javob yozing! ;)
qo'shib qo'ydi muallif Adolfo, manba
@TeodorCiuraru, C'mon, bo'sh ( [] ) qatori haqida gapiraman (bu 5-fikrga o'xshaydi) va siz nil haqida gapirishni davom etasiz./b> nil nima bilan bog'liq?
qo'shib qo'ydi muallif user28434, manba
@TeodorCiuraru, C'mon, bo'sh ( [] ) qatori haqida gapiraman (bu 5-fikrga o'xshaydi) va siz nil haqida gapirishni davom etasiz./b> nil nima bilan bog'liq?
qo'shib qo'ydi muallif user28434, manba
imageViews == [] (hatto nil bo'lmasa ham) bu erda falokatga olib kelishi mumkin bo'lgan imageViews [index] yomon vaqt.
qo'shib qo'ydi muallif user28434, manba
Btw, sizning namunangiz kodi swift uchun uchun tegishli emas. Hatto, bu kichik harflar belgilash liniyasiga tushib qolishi ehtimoli katta bo'lgan sintaksisini ham tuzatasiz.
qo'shib qo'ydi muallif user28434, manba
@TeodorCiuraru, shuningdek, zip bo'sh qator bilan ping (qabul qilingan javob kabi) bo'sh qatorga olib keladi. Agar imageViews aslida bo'sh bo'lsa, siz u erda noto'g'ri narsa qilyapsiz.
qo'shib qo'ydi muallif user28434, manba
OK, array2 allaqachon biror narsa bilan to'lganmi?
qo'shib qo'ydi muallif user28434, manba
Shunday qilib firstArray dan barcha elementlar ni tartibida array2 ga ko'chirishni xohlaysizmi? Keyin @Adolfo'nun sanasi nima izlayotgani.
qo'shib qo'ydi muallif user28434, manba
imageViews == [] (hatto nil bo'lmasa ham) bu erda falokatga olib kelishi mumkin bo'lgan imageViews [index] yomon vaqt.
qo'shib qo'ydi muallif user28434, manba
array2 (aka imageViews ) aytmadingizmi? Bo'sh qatorning pastki indeksidan foydalanib usulni chaqirishga harakat qilsangiz, juda yomon vaqt bo'ladi.
qo'shib qo'ydi muallif user28434, manba
@TeodorCiuraru, shuningdek, zip bo'sh qator bilan ping (qabul qilingan javob kabi) bo'sh qatorga olib keladi. Agar imageViews aslida bo'sh bo'lsa, siz u erda noto'g'ri narsa qilyapsiz.
qo'shib qo'ydi muallif user28434, manba
array2 (aka imageViews ) aytmadingizmi? Bo'sh qatorning pastki indeksidan foydalanib usulni chaqirishga harakat qilsangiz, juda yomon vaqt bo'ladi.
qo'shib qo'ydi muallif user28434, manba
Bolalar, men bu psevdokod ekanligini bildirganman. Bundan tashqari, konstruktsiyalar mening aniq misolimda farq qiladi. Elementlarni birinchisidan olish va ularni ikkinchi holatda qo'yish kerak.
qo'shib qo'ydi muallif Teodor Ciuraru, manba
Ok. Nvm. Men juda ehtiyotkorlik bilan emas edim, chunki bu mening ishim emas. Kechirasiz :))
qo'shib qo'ydi muallif Teodor Ciuraru, manba
Bolalar, Adolfo to'g'ri o'ynadi, lekin bu xatolik tufayli. Shuningdek, menda narsalarni chaqirish kerak. Men savolni yangilayman.
qo'shib qo'ydi muallif Teodor Ciuraru, manba
@Ocunidee bu erda. Men hech qanday pozitsiyada hech qanday qadriyatga ega emas, balki bu nil emas, balki bo'sh ekanligini bildirganman.
qo'shib qo'ydi muallif Teodor Ciuraru, manba
Yigitlar. Afsuslanish uchun uzr so'rayman. imageViews qatori nol emas. @Laffen, bu savol boshqasining dublikati emas.
qo'shib qo'ydi muallif Teodor Ciuraru, manba
Ok. Nvm. Men juda ehtiyotkorlik bilan emas edim, chunki bu mening ishim emas. Kechirasiz :))
qo'shib qo'ydi muallif Teodor Ciuraru, manba
Sizning kodingiz umuman ishlamaydi. Nima uchun sizda ImageViews bir nechta IBOutlet mavjud? Bundan tashqari, sizning loopingizdagi rasmda String turi mavjud bo'lsa, mag'lubiyat urlString deb nomlangan xususiyatga ega emas va nihoyat, biz hali sizning setImageFromString usuli imzosi yo'q
qo'shib qo'ydi muallif Ocunidee, manba
@Teodor Ciuraru soxta kod o'rniga haqiqiy kodni yoza olasizmi? array elementlariga qo'ng'iroq qilishni istagan funktsiyani o'z ichiga oladi
qo'shib qo'ydi muallif Ocunidee, manba
@Teodor Ciuraru soxta kod o'rniga haqiqiy kodni yoza olasizmi? array elementlariga qo'ng'iroq qilishni istagan funktsiyani o'z ichiga oladi
qo'shib qo'ydi muallif Ocunidee, manba
qo'shib qo'ydi muallif Laffen, manba
qo'shib qo'ydi muallif Laffen, manba
tasavvurlarni ko'rish uchun 5 ta chiqish nuqtasi borligini nazarda tuting, shunda avval ushbu tasavvurlarni bir qatorda qo'lda qo'shishingiz kerak, keyin siz fotoURLs.enumerated() {imageViews [index] da (indeks, rasm) uchun foydalanishingiz mumkin .setImageFromString (string: photo)}
qo'shib qo'ydi muallif Swift_Guru, manba

8 javoblar

Har ikkala qatorda bir xil elementlarni o'z ichiga olgan ...

let array2 = firstArray
3
qo'shib qo'ydi
Bu men ilgari so'ragan narsalar uchun to'g'ri javob. Rahmat. Ammo men bu savolga nisbatan ancha murakkab ekanligimni bilib oldim va savolni yangiladim.
qo'shib qo'ydi muallif Teodor Ciuraru, manba

Har ikkala qatorda bir xil elementlarni o'z ichiga olgan ...

let array2 = firstArray
3
qo'shib qo'ydi
Bu men ilgari so'ragan narsalar uchun to'g'ri javob. Rahmat. Ammo men bu savolga nisbatan ancha murakkab ekanligimni bilib oldim va savolni yangiladim.
qo'shib qo'ydi muallif Teodor Ciuraru, manba

Kodimni sinab ko'rmayapman, lekin o'xshash narsa bo'lishi mumkin ...

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

    return UIImageView(image: image)
)

PhotoURLsni URL qatori deb hisoblaymiz.

3
qo'shib qo'ydi
Tashakkur, Adolfo. Albatta, qadrlayman. Sizlar mening qiziqishimni bajarishga yordam berdingizlar.
qo'shib qo'ydi muallif Teodor Ciuraru, manba

Kodimni sinab ko'rmayapman, lekin o'xshash narsa bo'lishi mumkin ...

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

    return UIImageView(image: image)
)

PhotoURLsni URL qatori deb hisoblaymiz.

3
qo'shib qo'ydi
Tashakkur, Adolfo. Albatta, qadrlayman. Sizlar mening qiziqishimni bajarishga yordam berdingizlar.
qo'shib qo'ydi muallif Teodor Ciuraru, manba

Siz shunday bir narsani sinashingiz mumkin:

zip(imageViews, photoURLs)
    .forEach { $0.setImageFromString(string: $1.urlString) }

Batafsil ma'lumot uchun:

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
1
qo'shib qo'ydi
Arzimaydi! Va, mana, bu olamdan olingan ma'lumot: http://www.waplog.me -giz .
qo'shib qo'ydi muallif beeth0ven, manba
Bu men izlayotgan narsaga to'g'ri javob. Rahmat!
qo'shib qo'ydi muallif Teodor Ciuraru, manba

Siz shunday bir narsani sinashingiz mumkin:

zip(imageViews, photoURLs)
    .forEach { $0.setImageFromString(string: $1.urlString) }

Batafsil ma'lumot uchun:

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
1
qo'shib qo'ydi
Arzimaydi! Va, mana, bu olamdan olingan ma'lumot: http://www.waplog.me -giz .
qo'shib qo'ydi muallif beeth0ven, manba
Bu men izlayotgan narsaga to'g'ri javob. Rahmat!
qo'shib qo'ydi muallif Teodor Ciuraru, manba
let flatMappedNumbers = firstArray.flatMap { $0 }
print(flatMappedNumbers)
0
qo'shib qo'ydi
xar xil xarflarni qaytarish jadvali, aksariyat hollarda sizga kerak bo'lmagan tekis xaritalar afzal.
qo'shib qo'ydi muallif Bohdan Savych, manba
@ user28434 yomon narsa, xaritani [Int?] -> [Int?], yassi xarita [Int?] -> [Int] deb hisoblayman.
qo'shib qo'ydi muallif Bohdan Savych, manba
Agar OXga nil lar kerak bo'lsa nima bo'ladi?
qo'shib qo'ydi muallif user28434, manba
Nima uchun flatMap ni bu yerda ishlatish kerak?
qo'shib qo'ydi muallif user28434, manba
@BohdanSavich, a? Int -> Int funktsiyasi bilan [Map] ni aytganda [Int?] yoki biror narsa bormi?
qo'shib qo'ydi muallif user28434, manba
Bilaman, lekin nima uchun bironta javobda flatMap dan foydalangansiz. Nima uchun buni bilmoqchiman.
qo'shib qo'ydi muallif user28434, manba
Men sizning savolingizni ko'targan edim, chunki men o'zimning asl savolimga mos keladi deb o'ylayman. Agar siz ushbu yangi versiyasi uchun echimni topsangiz, minnatdor bo'lardim.
qo'shib qo'ydi muallif Teodor Ciuraru, manba
let flatMappedNumbers = firstArray.map {$ 0}
qo'shib qo'ydi muallif Swift_Guru, manba
@ user28434 noto'g'ri emasmi?
qo'shib qo'ydi muallif Swift_Guru, manba
u nilni e'tiborsiz qoldiradi.
qo'shib qo'ydi muallif Swift_Guru, manba
xarita funksiyasidan foydalanishingiz mumkin
qo'shib qo'ydi muallif Swift_Guru, manba
Nima uchun nil ttga e'tibor bermaslik kerak deb o'yladim
qo'shib qo'ydi muallif Swift_Guru, manba
let flatMappedNumbers = firstArray.flatMap { $0 }
print(flatMappedNumbers)
0
qo'shib qo'ydi
xar xil xarflarni qaytarish jadvali, aksariyat hollarda sizga kerak bo'lmagan tekis xaritalar afzal.
qo'shib qo'ydi muallif Bohdan Savych, manba
@ user28434 yomon narsa, xaritani [Int?] -> [Int?], yassi xarita [Int?] -> [Int] deb hisoblayman.
qo'shib qo'ydi muallif Bohdan Savych, manba
Nima uchun flatMap ni bu yerda ishlatish kerak?
qo'shib qo'ydi muallif user28434, manba
Agar OXga nil lar kerak bo'lsa nima bo'ladi?
qo'shib qo'ydi muallif user28434, manba
@BohdanSavich, a? Int -> Int funktsiyasi bilan [Map] ni aytganda [Int?] yoki biror narsa bormi?
qo'shib qo'ydi muallif user28434, manba
Bilaman, lekin nima uchun bironta javobda flatMap dan foydalangansiz. Nima uchun buni bilmoqchiman.
qo'shib qo'ydi muallif user28434, manba
Men sizning savolingizni ko'targan edim, chunki men o'zimning asl savolimga mos keladi deb o'ylayman. Agar siz ushbu yangi versiyasi uchun echimni topsangiz, minnatdor bo'lardim.
qo'shib qo'ydi muallif Teodor Ciuraru, manba
u nilni e'tiborsiz qoldiradi.
qo'shib qo'ydi muallif Swift_Guru, manba
@ user28434 noto'g'ri emasmi?
qo'shib qo'ydi muallif Swift_Guru, manba
xarita funksiyasidan foydalanishingiz mumkin
qo'shib qo'ydi muallif Swift_Guru, manba
let flatMappedNumbers = firstArray.map {$ 0}
qo'shib qo'ydi muallif Swift_Guru, manba
Nima uchun nil ttga e'tibor bermaslik kerak deb o'yladim
qo'shib qo'ydi muallif Swift_Guru, manba