Groovy-Schwartzian变换
有人能建议在Groovy中实现更简单、更优雅的Perl吗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
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的期望。没有忠实的类比,这个主题是不完整的。