عملیات پیشرفته آرایه در جولیا
comprehension، sort با کلید، findall، unique و عملیات برداری
Comprehension — ساخت آرایه با فرمول
یکی از زیباترین ویژگیهای جولیا — ساخت آرایه از یک عبارت ریاضی:
# مربع اعداد ۱ تا ۵
squares = [x^2 for x in 1:5]
println(squares) # [1, 4, 9, 16, 25]
# با شرط
evens = [x for x in 1:20 if x % 2 == 0]
println(evens) # [2, 4, 6, ..., 20]
# ترکیب
result = [x^2 for x in 1:10 if x % 3 == 0]
println(result) # [9, 36, 81]
# دو متغیر (ماتریس)
grid = [i * j for i in 1:3, j in 1:3]
println(grid)
Comprehension مثل «ساخت مجموعه» در ریاضیات است: {x² | x ∈ 1..5, x زوج} — جولیا از ریاضی الهام گرفته!
مرتبسازی پیشرفته
arr = [5, 2, 8, 1, 9]
# صعودی (پیشفرض)
println(sort(arr))
# نزولی
println(sort(arr, rev=true))
# با کلید
words = ["موز", "سیب", "پرتقال", "کیوی"]
println(sort(words, by=length)) # بر اساس طول!
# sort! خود اصلی را تغییر میدهد
sort!(arr)
println(arr)
جستجو در آرایه
arr = [4, 8, 15, 16, 23, 42]
# اولین عنصر با شرط
idx = findfirst(x -> x > 20, arr)
println("ایندکس اولین >۲۰: ", idx)
# همه موارد
allBig = findall(x -> x > 10, arr)
println("ایندکس همه >۱۰: ", allBig)
# شمارش
count = count(x -> x % 2 == 0, arr)
println("تعداد زوج: ", count)
# بررسی همه/بعضی
println(all(x -> x > 0, arr)) # همه مثبتاند؟
println(any(x -> x > 40, arr)) # بعضی >۴۰؟
unique — حذف تکراری
arr = [1, 2, 2, 3, 1, 4, 3]
println(unique(arr)) # [1, 2, 3, 4]
عملیات برداری — دوباره!
a = [1, 2, 3, 4]
b = [10, 20, 30, 40]
println(a .+ b) # [11, 22, 33, 44] — جمع عنصر به عنصر!
println(a .* b) # [10, 40, 90, 160]
println(a .^ 2) # [1, 4, 9, 16]
# توابع برداری
println(sqrt.(a)) # جذر همه
println(sum(a .* b)) # ضرب داخلی (dot product)!
تقسیم و اتصال آرایهها
a = [1, 2, 3]
b = [4, 5, 6]
# اتصال
println(vcat(a, b)) # [1, 2, 3, 4, 5, 6] (عمودی)
println([a; b]) # همان!
println([a..., b...]) # همان!
# بازهبندی
chunked = [1, 2, 3, 4, 5, 6]
println(chunked[1:3])
println(chunked[4:end])
مثال عملی: تحلیل نمرات
scores = [18, 12, 20, 15, 8, 17, 19, 10]
-- آمار
println("میانگین: ", sum(scores) / length(scores))
println("بیشینه: ", maximum(scores))
println("قبولیها: ", count(s -> s >= 10, scores))
-- نمرات قبولی مرتب
passed = sort(filter(s -> s >= 10, scores), rev=true)
println("قبولیها (نزولی): ", passed)
-- مربع نمرات (برای وزندهی)
println("وزندار: ", [s^2 for s in scores])
این مبحث بخشی از دوره آموزش کامل جولیا است.