Scala中是否存在可返回Range类型上界的内置函数?
Scala Range获取上界的简洁方案
你完全不需要调用max方法实现需求,max是通用集合方法,需要遍历整个Range计算结果,对于大跨度Range性能很差。Scala的Range类本身内置了O(1)时间复杂度的边界获取属性:
- 如果你需要获取Range定义时的右边界值(不区分
to/until生成的区间),直接使用end属性:val closedRange = 1 to 10 println(closedRange.end) // 输出10 val openRange = 1 until 10 println(openRange.end) // 输出10 - 如果你需要获取Range实际包含的最大元素,和你示例中
range.max的效果完全一致,直接使用last属性即可:val range = 1 to 10 val upper = range.last // upper: Int = 10,完全符合你的预期效果 // 对于左闭右开的until生成的Range也能正确返回实际最大值 val range2 = 1 until 10 println(range2.last) // 输出9
以上属性对带步长的Range同样适用:
val stepRange = 1 to 10 by 3 println(stepRange.end) // 10 println(stepRange.last) // 7
内容的提问来源于stack exchange,提问作者Tarmiac
相关产品推荐
相关产品推荐

