2010-01-22 13 views
13
पर प्रत्येक तत्व बदलने एक और सूची में से एक सूची उत्पन्न

मैं एक नियंत्रक पर निम्नलिखित कोड मिल गया हैग्रूवी

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 */ 

मैं दूर छाप वहाँ शायद किसी तरह एक में यह करने के लिए है कि नहीं रख सकते हैं और अधिक सुरुचिपूर्ण तरीके से, पायथन में एक सूची समझ करने के लिए कुछ इसी तरह:

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

एक खाली सूची की घोषणा और उसके बाद पॉप्युलेट यह काम करने के सबसे अच्छा तरीका प्रतीत नहीं होता है करने के लिए होने ... यह संभव है कुछ करो जी इस तरह, या ग्रोवी इसे अनुमति नहीं देता है?

उत्तर

0

ठीक है, यदि आप grails का उपयोग कर रहे हैं, तो आप खोज विधि के साथ एक मॉडल क्लास का उपयोग क्यों नहीं कर रहे हैं?
सादे कच्चे एसक्यूएल का उपयोग असाधारण मामलों पर किया जाना चाहिए।

+0

हां, यह इन मामलों में से एक है ;-) तालिका एक दृश्य है, इसलिए डोमेन को डोमेन के रूप में परिभाषित करने में कुछ समस्याएं हैं। – Khelben

9

tim_yates 'जवाब एक साफ समाधान है जब आप एक विधि (या संपत्ति) कॉल करना चाहते हैं क्रम में सूची के प्रत्येक तत्व पर बदलने के लिए उदाहरण के लिए:

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

लेकिन यदि आप किसी अन्य वस्तु से एक विधि कॉल या कुछ और अधिक जटिल क्या करना चाहते हैं आपउपयोग कर सकते हैं:

[1, 2, 3].collect {Math.cos(it * Math.PI)} 
संबंधित मुद्दे