【发布时间】:2012-09-25 00:17:03
【问题描述】:
我只是被小精灵弄湿了。我知道 gremlin 是基于 groovy 的。我找到了文档here,但我仍然不确定语法是什么意思。
我对使用比较器的排序语法如何工作感到有些困惑:
m.sort{a,b -> a.value <=> b.value}
有人能解释一下{ 和} 之间的所有不同位是什么意思吗?
【问题讨论】:
我只是被小精灵弄湿了。我知道 gremlin 是基于 groovy 的。我找到了文档here,但我仍然不确定语法是什么意思。
我对使用比较器的排序语法如何工作感到有些困惑:
m.sort{a,b -> a.value <=> b.value}
有人能解释一下{ 和} 之间的所有不同位是什么意思吗?
【问题讨论】:
当sort 使用的Closure 有两个参数时,它的作用类似于传统的Comparator。也就是说,对于排序期间进行的每个比较,在两个元素a 和b 之间,它返回一个负整数、零或正整数,因为第一个参数小于、等于、或大于秒。
在您的特定场景中,比较是使用spaceship operator <=> 的结果。换句话说,您实际上是按升序顺序对元素进行排序。
例如,如果您有列表[ 3, 2, 1 ],则使用该排序的结果would be[ 1, 2, 3 ]。
因此,m.sort{a,b -> a.value <=> b.value}大致相当于使用以下 compare 函数:
int compare(a, b) {
if (a < b) {
return -1;
} else if (a > b) {
return 1;
} else {
return 0;
}
}
【讨论】:
a,b -> 只是将值 a 和 b 传递给比较器?
<=> 宇宙飞船操作员。 Wiki 帮助不大