范围 #

一、范围基础 #

1.1 创建范围 #

使用:运算符创建范围:

julia
r1 = 1:5
r2 = 1:10
r3 = 'a':'z'
r4 = 0.0:0.1:1.0

1.2 范围类型 #

julia
typeof(1:5)
typeof(1:2:10)
typeof(0.0:0.1:1.0)
typeof('a':'z')

1.3 范围特点 #

范围是惰性的,不存储所有元素:

julia
r = 1:10^9
length(r)
first(r)
last(r)

二、范围类型 #

2.1 UnitRange #

步长为1的范围:

julia
r = 1:10
typeof(r)
step(r)

2.2 StepRange #

自定义步长的范围:

julia
r = 1:2:10
typeof(r)
step(r)
collect(r)

2.3 StepRangeLen #

浮点数范围:

julia
r = 0.0:0.1:1.0
typeof(r)
step(r)
length(r)
collect(r)

2.4 LinRange #

线性间隔范围:

julia
r = LinRange(0, 1, 11)
typeof(r)
collect(r)

三、范围操作 #

3.1 基本属性 #

julia
r = 1:2:10
first(r)
last(r)
step(r)
length(r)
minimum(r)
maximum(r)

3.2 索引访问 #

julia
r = 1:2:10
r[1]
r[3]
r[end]
r[2:4]

3.3 包含检查 #

julia
r = 1:2:10
5 in r
6 in r
in(5, r)
in(6, r)

3.4 范围运算 #

julia
r1 = 1:5
r2 = 3:7

intersect(r1, r2)
union(r1, r2)
setdiff(r1, r2)

四、范围迭代 #

4.1 for循环 #

julia
for i in 1:5
    println(i)
end

for i in 1:2:10
    println(i)
end

4.2 枚举 #

julia
for (i, x) in enumerate(1:3:10)
    println("$i: $x")
end

4.3 迭代器 #

julia
r = 1:5
iterate(r)
iterate(r, 1)
iterate(r, 2)

五、范围应用 #

5.1 数组索引 #

julia
arr = [10, 20, 30, 40, 50]
arr[1:3]
arr[2:2:end]
arr[end:-1:begin]

5.2 数组创建 #

julia
[i^2 for i in 1:5]
[i * j for i in 1:3, j in 1:3]
zeros(5)
ones(3, 3)
rand(2, 3)

5.3 循环计数 #

julia
for i in 1:100
    if i % 10 == 0
        println(i)
    end
end

5.4 矩阵索引 #

julia
mat = [1 2 3; 4 5 6; 7 8 9]
mat[1:2, 2:3]
mat[:, 1]
mat[1, :]

六、范围函数 #

6.1 range函数 #

julia
range(1, length=5)
range(1, stop=10, length=5)
range(1, stop=10, step=2)
range(1, step=2, length=5)

6.2 OneTo #

julia
r = Base.OneTo(5)
typeof(r)
collect(r)

6.3 axes #

julia
arr = [1 2 3; 4 5 6]
axes(arr)
axes(arr, 1)
axes(arr, 2)

6.4 eachindex #

julia
arr = [10, 20, 30, 40, 50]
for i in eachindex(arr)
    println("$i: $(arr[i])")
end

七、范围与数学 #

7.1 等差数列 #

julia
r = 1:5
sum(r)
mean(r)

7.2 等比数列 #

julia
[2^i for i in 0:5]

7.3 线性空间 #

julia
using LinearAlgebra
r = LinRange(0, 2π, 100)
sin.(r)

八、实践练习 #

8.1 练习1:求和 #

julia
function sum_range(start, stop, step=1)
    sum(start:step:stop)
end

sum_range(1, 100)
sum_range(1, 100, 2)

8.2 练习2:生成序列 #

julia
function fibonacci_range(n)
    a, b = 0, 1
    result = Int[]
    for _ in 1:n
        a, b = b, a + b
        push!(result, a)
    end
    return result
end

fibonacci_range(10)

8.3 练习3:网格坐标 #

julia
function grid_coordinates(x_range, y_range)
    [(x, y) for x in x_range, y in y_range]
end

grid_coordinates(1:3, 1:2)

8.4 练习4:时间序列 #

julia
function time_series(start_time, end_time, step_seconds)
    start_seconds = start_time.hour * 3600 + start_time.minute * 60 + start_time.second
    end_seconds = end_time.hour * 3600 + end_time.minute * 60 + end_time.second
    
    times = []
    for s in start_seconds:step_seconds:end_seconds
        h, s = divrem(s, 3600)
        m, s = divrem(s, 60)
        push!(times, (hour=h, minute=m, second=s))
    end
    return times
end

using Dates
time_series(Time(9, 0, 0), Time(9, 30, 0), 300)

九、总结 #

本章我们学习了:

  1. 范围创建:使用:运算符
  2. 范围类型:UnitRange、StepRange、StepRangeLen
  3. 范围操作:索引、包含检查
  4. 范围迭代:for循环和枚举
  5. 范围应用:数组索引、循环计数
  6. 范围函数:range、axes、eachindex

接下来让我们学习Julia的运算符!

最后更新:2026-03-27