在groovy中有沒有可以通過數字找到附近的方法?例如:Groovy附近的數字的方法
def list = [22,33,37,56]
def number = 25
//any method to find $number is near to 22 rather than 33.
是否有任何方法用於上述目的,或者我必須爲此構建自己的方法或閉包。
在此先感謝。
在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 }.value.first()
的list.groupBy { (it - number).abs() }
將改變列表成圖,其中每個映射項由距離與數量鍵和原列表項的值:
[3:[22], 8:[33], 12:[37], 31:[56]]
現在的值分別對自己的列表,理論上原始列表可以包含兩個條目具有相同的距離。然後在地圖上選擇具有最小密鑰的條目,取其值並返回值列表的第一個條目。
編輯:
這裏有一個的排序基於距離原來的列表,並返回排序列表的第一個值簡單的版本:
list.sort { (it - number).abs() }.first()
簡化版本的+1 ;-) – 2011-06-09 08:16:19
在這種情況下,sort()是如何工作的? – 2011-06-09 09:16:29
@ant它很好地描述了[在文檔中](http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html#sort%28groovy.lang.Closure%29) – 2011-06-09 09:32:36
如果它是一個分類List
,Collections.binarySearch()
做幾乎一樣的工作。 Arrays.binarySearch()
也是如此。
您是否想在列表中找到最接近的數字,或者是否在「接近度」閾值內找到所有數字? – 2011-06-09 06:11:18
如果我在列表中找到最接近的數字而不是最接近的閾值,它將會很好:) – 2011-06-09 06:18:11