با

بازه در Julia

1 تمرین

درباره‌ی بازه

فرض کنید می‌خواهید همه‌ی اعداد صحیح نامنفی تا ۱۰۰۰ را داشته باشید. اگر مجبور بودید این‌ها را درون یک آرایه تایپ کنید، مسخره می‌شد.

برای این کار، نوع range را داریم:

julia> 0:1000
0:1000

julia> typeof(0:1000)
UnitRange{Int64}

بازه‌ها بسیار رایج‌اند: نه فقط برای صرفه‌جویی در تایپ کردن، بلکه به‌عنوان نوع بازگشتی توابع هم به کار می‌روند.

توجه کنید که بازه‌ها آرایه نیستند.

آرایه‌ها از همان ابتدا تعریف می‌شوند (ارزیابی «حریصانه») و به حافظه‌ای متناسب با طول آرایه نیاز دارند.

در مقابل، بازه‌ها فقط مجموعه‌ای از دستورها برای تولید یک دنباله هستند (ارزیابی «تنبلانه» یا یک «تکرارگر»).

اگر به بازه‌ای به شکل آرایه نیاز دارید، از تابع collect() برای تبدیل استفاده کنید:

julia> collect(0:5)
6-element Vector{Int64}:
 0
 1
 2
 3
 4
 5

به‌صورت اختیاری، از collect(type, range) استفاده کنید تا نوع آرایه‌ی خروجی را مشخص کنید.

اندازه‌ی گام را می‌توان مشخص کرد، در این مورد ۰٫۳:

julia>  collect(1.0:0.3:2.0)
4-element Vector{Float64}:
 1.0
 1.3
 1.6
 1.9

پس نحوه‌ی نگارش به این صورت است: start:stepsize:stop. هر دو حد انتهایی شامل می‌شوند، همان‌طور که در مثال اعداد صحیح دیدید. اگر اندازه‌ی گام stop - start را دقیقاً تقسیم نکند، آخرین عنصر از stop فراتر نخواهد رفت.

برای کنترل دقیق‌تر، از تابع Base.range() استفاده کنید که گزینه‌های بیشتری دارد.

بازه‌های حرفی

دنباله‌های غیرعددی را هم می‌توان در بازه‌ها به کار برد. ساده‌ترین مثال، حروف ASCII است:

julia> 'a':'d'
'a':1:'d'

julia> typeof('a':'d')
StepRange{Char, Int64}

julia> collect('a':'d')
4-element Vector{Char}:
 'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
 'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)
 'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
 'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)

نوع Char در مفهوم دیگری با جزئیات بیشتری بررسی می‌شود. فعلاً با این‌ها مثل نویسه‌های تکی داخل کوتیشن ساده رفتار کنید.

توابع و عملگرها برای بازه‌ها

حدود یک بازه را با first() و last() بررسی کنید.

اغلب مفید است که بفهمید آیا یک مقدار خاص بخشی از یک بازه است یا نه. تابع زیربنایی این کار in() است، اما رایج‌تر آن است که از عملگر میان‌وندی in یا هم‌معنی ریاضی‌ترش ∈ استفاده کنید. در یک ویرایشگر مناسب، میان‌بر ∈ به این صورت است: \in و سپس کلید Tab.

 r = 1:10  # => 1:10
 first(r)  # => 1
 last(r)   # => 10
 7 in r    # => true
 11 ∈ r    # => false

عملگر in یا ∈ در اینجا با بازه‌ها به کار رفته است، اما با چند نوع مجموعه‌ی دیگر مانند بردارها، مجموعه‌ها و دیکشنری‌ها هم به کار می‌رود.

بیشتر درباره‌ی نمایه‌گذاری آرایه

بازه‌های صحیح و آرایه‌ها را می‌توان در نمایه‌گذاری آرایه به کار برد:

nums = collect(10.0:50.0)
nums[3:2:7]  # gives [12.0, 14.0, 16.0]
nums[ [3, 5, 7] ] # also gives [12.0, 14.0, 16.0]

استفاده همراه با end هم کار می‌کند، هرچند اولویت عملگرها باعث می‌شود پرانتزها ممکن است لازم باشند:

 nums[(end - 3):end]
4-element Vector{Float64}:
 47.0
 48.0
 49.0
 50.0

البته هر یک از عناصر نمایه می‌تواند یک متغیر صحیح از قبل موجود باشد.

ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

بازه را یاد بگیرید