Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy-Schwartzian变换_Groovy - Fatal编程技术网

Groovy-Schwartzian变换

Groovy-Schwartzian变换,groovy,Groovy,有人能建议在Groovy中实现更简单、更优雅的Perl吗 def unsorted = [7, 3, 109, 22, 55] def sortCriterion = { it + 1 } def sorted = unsorted.inject([:],{map, v -> map << [(v):sortCriterion(v)]}).sort{it.value}.collect{k,v->k} assert sorted == [ 3, 7, 22, 55, 109

有人能建议在Groovy中实现更简单、更优雅的Perl吗

def unsorted = [7, 3, 109, 22, 55]
def sortCriterion = { it + 1 }
def sorted = unsorted.inject([:],{map, v -> map << [(v):sortCriterion(v)]}).sort{it.value}.collect{k,v->k}
assert sorted == [ 3, 7, 22, 55, 109]
例如,必须有更好的方法从已排序的地图中获取密钥。

您可以执行以下操作:

def sorted = unsorted.collectEntries { v -> [ (v):sortCriterion( v ) ] }.sort { it.value }.keySet() as List
假设您将Groovy 1.8用于该方法

以下是我对它的看法:

def sorted = unsorted.groupBy(sortCriterion).sort().values().flatten()

如果有人在意的话,实际的直译应该是

unsorted.collect{[it,sortCriterion(it)]}.sort{it[1]}.collect{it[0]}

很难想象一个比这更简单的ST表达式。您的提交提高了我对使用Groovy 1.8.1的期望。没有忠实的类比,这个主题是不完整的。