使用奇怪的groovy代码进行排序

nic*_* m. 2 sorting groovy

我是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种排序方法,我不确定这里使用的是哪种方法)

epi*_*ian 8

代码正在使用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]]
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,当您想要通过某个值或某些"权重"比较元素时,使用此一元闭包变量非常方便,该权重对每个元素的计算方式相同.