跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kotlin区间(Ranges)
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{Note|本节内容适用于Kotlin 1.3及以上版本}} = Kotlin区间(Ranges) = '''区间(Range)'''是Kotlin中表示一系列连续值的特殊结构,支持数字、字符等多种类型。区间通过操作符<code>..</code>、<code>until</code>、<code>downTo</code>等实现,是控制流和集合操作的重要基础。 == 基础概念 == 区间表示数学中的闭区间或半开区间,包含以下核心特性: * '''包含边界''':如<code>1..4</code>包含1,2,3,4 * '''迭代能力''':可用于循环遍历 * '''包含检测''':通过<code>in</code>操作符检查元素是否属于区间 === 数学表示 === 闭区间表示为:<math>[a, b] = \{x \mid a \leq x \leq b\}</math><br/> 半开区间表示为:<math>[a, b) = \{x \mid a \leq x < b\}</math> == 区间创建 == Kotlin提供多种创建区间的方式: === 基本语法 === <syntaxhighlight lang="kotlin"> // 闭区间(包含两端) val intRange = 1..10 val charRange = 'a'..'z' // 半开区间(不包含结束值) val halfOpenRange = 1 until 10 // 1..9 // 递减区间 val downRange = 10 downTo 1 </syntaxhighlight> === 区间类型 === {| class="wikitable" ! 类型 !! 示例 !! 等效数学表示 |- | 闭区间 || <code>1..4</code> || [1,4] |- | 半开区间 || <code>1 until 4</code> || [1,4) |- | 递减区间 || <code>4 downTo 1</code> || [4,1] |} == 区间操作 == === 遍历区间 === <syntaxhighlight lang="kotlin"> for (i in 1..4) print(i) // 输出:1234 for (i in 4 downTo 1) print(i) // 输出:4321 for (i in 1 until 4) print(i) // 输出:123 </syntaxhighlight> === 步长控制 === 使用<code>step</code>指定迭代步长: <syntaxhighlight lang="kotlin"> for (i in 1..10 step 2) print("$i ") // 输出:1 3 5 7 9 for (i in 10 downTo 1 step 3) print("$i ") // 输出:10 7 4 1 </syntaxhighlight> === 包含检测 === <syntaxhighlight lang="kotlin"> val range = 1..10 println(5 in range) // true println(15 in range) // false println(5 !in range) // false </syntaxhighlight> == 特殊区间类型 == === 字符区间 === <syntaxhighlight lang="kotlin"> for (ch in 'a'..'d') print(ch) // 输出:abcd if ('c' in 'a'..'f') println("包含") // 输出:包含 </syntaxhighlight> === 自定义区间 === 通过实现<code>Comparable</code>接口创建自定义类的区间: <syntaxhighlight lang="kotlin"> class Date(val year: Int, val month: Int) : Comparable<Date> { override fun compareTo(other: Date): Int = when { year != other.year -> year - other.year else -> month - other.month } } val dateRange = Date(2023,1)..Date(2023,12) println(Date(2023,6) in dateRange) // true </syntaxhighlight> == 实际应用案例 == === 成绩等级判断 === <syntaxhighlight lang="kotlin"> fun getGrade(score: Int): String = when(score) { in 90..100 -> "A" in 80 until 90 -> "B" in 70 until 80 -> "C" in 60 until 70 -> "D" else -> "F" } println(getGrade(85)) // 输出:B </syntaxhighlight> === 集合过滤 === <syntaxhighlight lang="kotlin"> val numbers = listOf(1, 3, 7, 10, 15) val filtered = numbers.filter { it in 5..12 } println(filtered) // 输出:[7, 10] </syntaxhighlight> === 图形绘制范围 === <mermaid> graph TD A[开始] --> B{坐标在画布内?} B -->|x in 0..800<br>y in 0..600| C[绘制像素] B -->|超出范围| D[跳过绘制] </mermaid> == 性能考虑 == * 区间对象会缓存边界值,重复使用相同区间不会产生额外开销 * 对于大型区间(如<code>1..1_000_000</code>),建议使用序列(Sequence)进行惰性计算 <syntaxhighlight lang="kotlin"> // 高效处理大区间 (1..1_000_000).asSequence() .filter { it % 2 == 0 } .take(10) .forEach { println(it) } </syntaxhighlight> == 常见问题 == {{Warning|边界值陷阱}} * <code>1 until 1</code>是空区间 * <code>10 downTo 1 step -1</code>会导致无限循环 * 浮点数区间应使用<code>BigDecimal</code>而非默认浮点类型 {{Tip|最佳实践}} * 优先使用<code>until</code>避免数组越界 * 对复杂判断条件,可将区间存储在变量中复用 * 使用<code>when</code>表达式配合区间实现清晰的条件分支 == 进阶用法 == === 区间运算 === Kotlin支持区间交集、并集等操作: <syntaxhighlight lang="kotlin"> val range1 = 1..10 val range2 = 5..15 // 交集 println(range1 intersect range2) // 5..10 // 连续区间检测 println(range1 contiguousTo 11..20) // false </syntaxhighlight> === 无限区间 === 通过自定义实现可创建无限区间: <syntaxhighlight lang="kotlin"> val infiniteRange = 1..Int.MAX_VALUE println(infiniteRange.take(5).toList()) // [1, 2, 3, 4, 5] </syntaxhighlight> === 区间代数 === 区间满足以下数学性质: * 自反性:<math>a \in [a, b]</math> * 传递性:<math>a \leq b \leq c \Rightarrow [a,b] \cup [b,c] = [a,c]</math> * 单调性:<math>x \in [a,b] \Rightarrow x+k \in [a+k, b+k]</math> [[Category:编程语言]] [[Category:Kotlin]] [[Category:Kotlin控制流]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:Mbox
(
编辑
)
模板:Note
(
编辑
)
模板:Tip
(
编辑
)
模板:Warning
(
编辑
)
模块:Arguments
(
编辑
)
模块:Message box
(
编辑
)
模块:Message box/ambox.css
(
编辑
)
模块:Message box/configuration
(
编辑
)
模块:Yesno
(
编辑
)