我是groovy的初学者,我似乎无法理解这段代码.你能告诉我这段代码是如何运作的吗?
def list = [ [1,0], [0,1,2] ]
list = list.sort { a,b -> a[0] <=> b[0] }
assert list == [ [0,1,2], [1,0] ]
Run Code Online (Sandbox Code Playgroud)
我所知道的是,由于宇宙飞船运营商,第二行应该返回值1,但是它的用途是什么?这是什么类型的?(gdk api中有6种排序方法,我不确定这里使用的是哪种方法)
代码正在使用Collection#sort(Closure).请注意,此方法有两种变体:
如果闭包是二进制的(即它需要两个参数),sort则将其用作典型的比较器接口:当第一个参数小于,等于或大于第二个参数时,它应返回负整数,零或正整数.
这是在该段代码中使用的变体.它通过第一个元素比较列表的元素,而列表的元素依次列出.
如果闭包是一元的(即它只需要一个参数),它将用于生成随后将用于比较的值(在某些语言中,这称为"键"函数).
因此,您发布的代码片段可以重写为:
def list = [[1,0], [0,1,2]]
list = list.sort { it[0] } // or { it.first() }
assert list == [[0,1,2], [1,0]]
Run Code Online (Sandbox Code Playgroud)
请注意,当您想要通过某个值或某些"权重"比较元素时,使用此一元闭包变量非常方便,该权重对每个元素的计算方式相同.
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |