Set و Range در جولیا

مجموعه‌های بدون تکرار (Set) و بازه‌های تنبل (Range) — ابزارهای جولیایی

Set — مجموعه بدون تکرار

Set کالکشنی است که تکرار ندارد و عضویت سریع است:

# تعریف
fruits = Set(["سیب", "موز", "پرتقال", "سیب"])
println(fruits)   # سیب فقط یک بار!

# افزودن
push!(fruits, "کیوی")

# بررسی عضویت — سریع!
println("سیب" in fruits)   # true

# تعداد اعضای یکتا
nums = [1, 2, 2, 3, 1, 4, 4, 5]
println(length(Set(nums)))   # 5

عملیات مجموعه‌ای — مثل ریاضی!

A = Set([1, 2, 3, 4])
B = Set([3, 4, 5, 6])

# اجتماع
println(union(A, B))        # {1, 2, 3, 4, 5, 6}

# اشتراک
println(intersect(A, B))    # {3, 4}

# تفاضل
println(setdiff(A, B))      # {1, 2}

# زیرمجموعه؟
println(issubset(Set([1, 2]), A))   # true
این دقیقاً ریاضیات مجموعه است! جولیا برای ریاضی‌دان‌ها ساخته شده — union، intersect و setdiff داخلی‌اند.

Range — بازه تنبل

Range کل بازه را در حافظه نمی‌سازد — فقط «شروع، پایان، گام» را نگه می‌دارد:

# بازه ساده
r = 1:5
println(r)         # 1:5
println(collect(r))   # [1, 2, 3, 4, 5] — تبدیل به آرایه

# با گام
evens = 0:2:10
println(collect(evens))   # [0, 2, 4, 6, 8, 10]

# معکوس
down = 5:-1:1
println(collect(down))   # [5, 4, 3, 2, 1]

Range در حلقه‌ها

for i in 1:5
    print(i, " ")
end
println()

# بازه‌های بزرگ — بدون مصرف حافظه!
for i in 1:1000000
    if i > 3 break end   # فقط ۳ بار
    println(i)
end
بازه 1:1000000 تقریباً هیچ حافظه نمی‌گیرد — فقط سه عدد ذخیره می‌شود. اما collect(1:1000000) یک میلیون عنصر می‌سازد!

عملیات روی Range

r = 1:2:10   # 1, 3, 5, 7, 9

println(length(r))    # 5
println(sum(r))       # 25
println(minimum(r))   # 1
println(maximum(r))   # 9

# عضویت
println(5 in r)       # true
println(4 in r)       # false

range با اعشار

# گام اعشاری
r = 0:0.5:2
println(collect(r))   # [0.0, 0.5, 1.0, 1.5, 2.0]

# بهتر: LinRange
println(collect(LinRange(0, 1, 5)))   # ۵ نقطه بین ۰ و ۱

کاربرد عملی: حذف تکراری با حفظ ترتیب

function uniqueOrdered(arr)
    seen = Set{eltype(arr)}()
    result = []
    for item in arr
        if !(item in seen)
            push!(seen, item)
            push!(result, item)
        end
    end
    return result
end

println(uniqueOrdered([3, 1, 3, 2, 1, 5]))   # [3, 1, 2, 5]

جدول مقایسه کالکشن‌ها

کالکشنویژگیکاربرد
Arrayمرتب، تکراری، تغییرپذیرلیست پویا
Tupleمرتب، تغییرناپذیرگروه ثابت
Dictکلید-مقدارجستجوی سریع
Setبدون تکرارعضویت سریع
Rangeتنبل، کم‌حافظهبازه اعداد

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

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