Xaritadagi farq, tanlash, to'plash, in'ektsiya qilish, aniqlash va har biriga yoqut

Yaqutdagi hamma narsa ob'ektdir. Yoqut ko'plab usullar yoki usullar yordamida bitta vazifani bajarish mumkin bo'lgan ko'plab usullarni qo'llab-quvvatlaydi. Array - bu har bir ob'ekt uchun Array ob'ekti uchun yoqut usullari bo'lgan xaritalar, tanlaganlar, to'playdigan, in'ektsiya qiladigan, aniqlaydigan ob'ekt. Keling, ushbu usullarning barchasini yaxshilab tushunaylik.

1) Xarita

Xarita sanab o'tilgan ob'ekt va blokni oladi, har bir element uchun blokni baholaydi va keyin hisoblangan qiymatlar bilan yangi qatorni qaytaradi.

[1,2,3,4,5,6,7,8,9,10] .map {| e | e * 5}
# => [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

Agar e <= 3 kabi biron bir aniq qiymatlarni tanlash uchun xaritadan foydalanishga harakat qilsangiz, u har bir elementni baholaydi va faqat to'g'ri yoki noto'g'ri bo'lgan natijani beradi.

[1,2,3,4,5,6,7,8,9,10] .map {| e | e <= 3}
# => [true, true, true, false, soxta, soxta, soxta, noto'g'ri, noto'g'ri, yolg'on, soxta]

2) Tanlang

Blok haqiqiy bo'lgan har bir element bilan blokni baholaydi.

[1,2,3,4,5,6,7,8,9,10] .select {| e | e> 5}
# => [6, 7, 8, 9, 10]

va shuningdek, bayonot haqiqiy bo'lgan elementni qaytarishni tanlang.

[1,2,3,4,5,6,7,8,9,10] .select {| e | e * 3}
# => [1,2,3,4,5,6,7,8,9,10]

3) to'plang

To'plash xaritaga o'xshaydi, u sanab o'tiladigan ob'ekt va blokni oladi, har bir element uchun blokni baholaydi va keyin hisoblangan qiymatlar bilan yangi qatorni qaytaradi.

[1,2,3,4,5,6,7,8,9,10]. Yig'ish {| e | e * 5}
# => [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

Agar siz n <= 3 kabi ma'lum bir qiymatlarni tanlash uchun to'plashni ishlatishga harakat qilsangiz, u har bir elementni baholaydi va faqat to'g'ri yoki noto'g'ri bo'lgan natijani beradi.

[1,2,3,4,5,6,7,8,9,10]. Yig'ish {| e | e <= 3}
# => [true, true, true, false, soxta, soxta, soxta, noto'g'ri, noto'g'ri, yolg'on, soxta]

4) har biri

Har biri har bir massiv bilan blokni baholaydi va hisoblangan emas, balki asl massivni qaytaradi.

[1,2,3,4,5,6,7,8,9,10] .each | | e | bosib chiqarish "# {e}!" e * 3}
1! 2! 3! 4! 5! 6! 7! 8! 9! 10! => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Agar siz har qanday qiymatni tanlash uchun har biridan foydalanishga harakat qilsangiz, masalan e <= 3, u har bir elementni baholaydi, lekin asl qatorni qaytaradi

[1,2,3,4,5,6,7,8,9,10] .each | | e | e <= 3}
# => [1,2,3,4,5,6,7,8,9,10]

5) AOK qiling

Akkumulyatorni (summani) oladi va massivda elementlar mavjud bo'lganda uni ko'p marta o'zgartiradi. Akkumulyatorning yakuniy qiymatini qaytaradi.
Agar siz akkumulyator uchun boshlang'ich qiymatni aniq ko'rsatmasangiz, unda akkumulyatorning boshlang'ich qiymati sifatida yig'ishning birinchi elementidan foydalaniladi.

[1,2,3,4,5,6,7,8,9,10] .inj {| sum, e | yig'indisi + = e}
# => 55
[1,2,3,4,5,6,7,8,9,10] .jihat (15) {| sum, e | yig'indisi + = e}
# => 70

6) aniqlang

Aniqlash shunchaki sodda qilib aytganda, Select.ga tengdir. Detect har bir element bilan blokni baholaydi, uning uchun haqiqiy qaytadi, lekin natijada faqat birinchi elementni beradi.

[1,2,3,4,5,6,7,8,9,10] .dastli {| e | e> 5}
# => 6

va shuningdek, aniqlanish haqiqiy bo'lgan birinchi elementni aniqlaydi.

[1,2,3,4,5,6,7,8,9,10] .dastli {| e | e * 3}
# => 1

Asl blog havolasi => http://techenthu.in/2017/09/29/difference-map-select-collect-inject-detect-ruby/