2010-01-22 75 views
13
将每个元素的列表

我有下面的代码放在一个控制器生成从另一个列表中关于Groovy

def db = new Sql(dataSource) 
    def rawLines = db.rows("SELECT name FROM LINES") 
    def lines = [] 
    /*(db.rows returns the values as [NAME:value] */ 
    rawLines.each { 
     lines.add(it.name) 
    } 
    /*Then, use lines */ 

我不能保持距离的印象,有可能是某种方式在做这个更优雅的方式,类似于一个列表理解的东西在Python:

lines = [ l.name for l in db.rows("SELECT name FROM LINES") ] 

有申报一个空列表,然后填充它似乎不做事最好方式... 是否有可能做一些事情g像这样,还是Groovy不允许它?

回答

0

那么,如果您使用的是grails,为什么不简单地使用模型类和findAll方法?
使用纯原始SQL应该在特殊情况下完成。

+0

是的,这是这些情况之一;-)该表是一个视图,所以在将该表定义为域时存在一些问题。 – Khelben 2010-01-22 08:57:45

9

tim_yates的回答是一个干净的解决方案时要调用一个方法(或属性)在顺序列表中的每个元素转变为如:

[1,2,3]*.multiply(5) 

,但如果你想从另一个对象调用一个方法或者做更复杂的东西,你可以用collect

[1, 2, 3].collect {Math.cos(it * Math.PI)}