我有一个集合,想要返回最接近某个固定值但不超过固定值的值。例如,如果我的集合如下所示:
val numbers = mutableListOf(23, 12, 64, 47, 36, 55)
Run Code Online (Sandbox Code Playgroud)
我的目标固定值为 35,从集合返回的值将为 23。以下是其他一些示例:
Target -> Returned
29 -> 23
5 -> null (there is no value less than 12, so null is returned)
70 -> 64
Run Code Online (Sandbox Code Playgroud)
我可以使用一些 Collection 函数来提供预期的结果吗?注意:数字列表未排序。在真正的应用程序中,这些不是数字,而是包含整数属性的对象,但如果这有助于解决方案,我也可以首先根据该值对集合进行排序。
您可以使用fold函数将最接近的值保存在累加器中。例如,
val numbers = mutableListOf(23, 12, 64, 47, 36, 55)
val target = 35
val answer = numbers.fold(null){acc: Int?, num ->
if(num <= target && (acc == null || num > acc)) num
else acc
}
Run Code Online (Sandbox Code Playgroud)
如果您想在目标与列表中的值之一匹配时中断循环,您可以使用以下命令
val numbers = mutableListOf(23, 12, 64, 47, 36, 55)
val target = 35
fun MutableList<Int>.findClosest(input: Int) = fold(null) { acc: Int?, num ->
val closest = if (num <= input && (acc == null || num > acc)) num else acc
if (closest == input) return@findClosest closest else return@fold closest
}
val answer = numbers.findClosest(target)
Run Code Online (Sandbox Code Playgroud)
一旦目标匹配特定值,return内部函数中的关键字就会从函数返回findClosest
| 归档时间: |
|
| 查看次数: |
1877 次 |
| 最近记录: |