【发布时间】:2019-12-09 19:28:14
【问题描述】:
如何以更 scala/功能(不是 java 之类)的方式验证数字序列是否属于允许的数字范围?
val valuesRight = Seq(1, 2, 3, 4, 5, 6, 7)
val valuesWrong = Seq(1, 2, 5, 6, 7, 8, 9)
val allowedValues = Range(1, 8)
def containsNotAllowedValues(allowed: Range, input: Seq[Int]): Boolean = {
var containsNotAllowedValue = false
// pseudo code of how to do it in java, But how in scala / functional way?
while next element is available
validate if it is contained in allowed
if not allowed set containsNotAllowedValue to true and break the loop early
}
containsNotAllowedValue
}
containsNotAllowedValues(allowedValues, valuesRight) // expected false as no wrong element contained
containsNotAllowedValues(allowedValues, valuesWrong) // expected true as at least single wrong element is contained
【问题讨论】:
-
需要注意的是
Range(1, 8)等价于(1 until 8)。即Range(1, 8).max == 7如果您只需要允许范围的下限/上限,则Tuple(例如(1, 8))可能是一个更简单的选择,因为Range用于更通用的构造函数Range(start: Int, end: Int, step: Int)。 -
没错。
标签: scala collections functional-programming