عملیات پیشرفته آرایه در جولیا

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])

این مبحث بخشی از دوره آموزش کامل جولیا است.

ابزارهای مرتبط