Groovy中邻近数的求法

Groovy中邻近数的求法,groovy,Groovy,在groovy中,有没有任何方法可以通过数字找到近似值?例如: def list = [22,33,37,56] def number = 25 //any method to find $number is near to 22 rather than 33. 是否有任何方法用于上述目的,或者我必须为此构建自己的方法或闭包 提前感谢。以下Groovy收集方法的组合将为您提供列表中最接近的数字: list.groupBy { (it - number).abs() }.min { it.key

在groovy中,有没有任何方法可以通过数字找到近似值?例如:

def list = [22,33,37,56]
def number = 25
//any method to find $number is near to 22 rather than 33.
是否有任何方法用于上述目的,或者我必须为此构建自己的方法或闭包


提前感谢。

以下Groovy收集方法的组合将为您提供列表中最接近的数字:

list.groupBy { (it - number).abs() }.min { it.key }.value.first()
list.groupBy{(it-number).abs()}
将列表转换为一个映射,其中每个映射条目由到数字的距离作为键和原始列表条目作为值组成:

[3:[22], 8:[33], 12:[37], 31:[56]]
这些值现在各自独立成一个列表,因为理论上原始列表可以包含两个距离相等的条目。然后在地图上选择具有最小键的条目,获取其值并返回值列表的第一个条目

编辑:

下面是一个更简单的版本,它根据距离对原始列表进行排序,并返回排序列表的第一个值:

list.sort { (it - number).abs() }.first()

以下Groovy收集方法的组合将为您提供列表中最接近的数字:

list.groupBy { (it - number).abs() }.min { it.key }.value.first()
list.groupBy{(it-number).abs()}
将列表转换为一个映射,其中每个映射条目由到数字的距离作为键和原始列表条目作为值组成:

[3:[22], 8:[33], 12:[37], 31:[56]]
这些值现在各自独立成一个列表,因为理论上原始列表可以包含两个距离相等的条目。然后在地图上选择具有最小键的条目,获取其值并返回值列表的第一个条目

编辑:

下面是一个更简单的版本,它根据距离对原始列表进行排序,并返回排序列表的第一个值:

list.sort { (it - number).abs() }.first()

如果它是一个排序的
列表
,则执行几乎相同的任务。
Arrays.binarySearch()

如果它是一个排序的
列表
,则执行几乎相同的任务。
Arrays.binarySearch()

您想在列表中找到最近的数字,还是在“接近度”阈值内的所有数字?如果我在列表中找到最近的数字而不是接近度阈值,那就好了:)您想在列表中找到最近的数字吗,或者所有在“接近度”阈值内的数字?如果我在列表中找到一个最接近的数字而不是接近度阈值,那就好了:)@ant它被描述得很好@ant它被描述得很好