簡體   English   中英

使用奇怪的groovy代碼進行排序

[英]sorting using weird groovy code

我是groovy的初學者,我似乎無法理解這段代碼。 你能告訴我這段代碼是如何運作的嗎?

def list = [ [1,0], [0,1,2] ]
list = list.sort { a,b -> a[0] <=> b[0] }
assert list == [ [0,1,2], [1,0] ]

我所知道的是,由於宇宙飛船運營商,第二行應該返回值1,但是它的用途是什么? 這是什么類型的? (gdk api中有6種排序方法,我不確定這里使用的是哪種方法)

代碼使用Collection#sort(Closure) 請注意,此方法有兩種變體:

  1. 如果閉包是二進制的(即它需要兩個參數), sort將它用作典型的比較器接口:當第一個參數小於,等於或大於第二個參數時,它應返回負整數,零或正整數分別。

    這是在該段代碼中使用的變體。 它通過第一個元素比較列表的元素,而列表的元素依次列出。

  2. 如果閉包是一元的(即它只需要一個參數),它將用於生成隨后將用於比較的值(在某些語言中,這稱為“鍵”函數)。

    因此,您發布的代碼片段可以重寫為:

     def list = [[1,0], [0,1,2]] list = list.sort { it[0] } // or { it.first() } assert list == [[0,1,2], [1,0]] 

    請注意,當您想要通過某個值或某些“權重”比較元素時,使用此一元閉包變量非常方便,該權重對每個元素的計算方式相同。

代碼段中的sort使用比較器參數方法調用 - 請參閱http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html#sort(java.util.Comparator

因此,您使用自己的比較器對集合進行排序。 現在比較器只使用內部集合的第一個元素來決定外部集合的順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM