ग्रोवी का each
लूप केवल एक पुनरावर्तक है, और इस तरह यह न तो उस संग्रह को प्रभावित करता है जिस पर यह काम करता है, न ही अपने आप का मूल्य देता है। यह मूल रूप से जावा के "लूप के लिए उन्नत (प्रत्येक के लिए उन्नत) के बराबर है," केवल गतिशील टाइपिंग और एक अंतर्निहित पाश चर (यह) की सुविधा के साथ। जबकि it
को संशोधित किया जा सकता है, यह एक व्यर्थ उद्यम है, क्योंकि आप मूल मूल्य का संदर्भ बदल रहे होंगे, न कि मूल्य स्वयं। उस पर अधिक के लिए this question देखें।
जब आपको किसी संग्रह के भीतर हर तत्व को संशोधित करने की आवश्यकता होती है, तो idiomatic Groovy (Grails) समाधान collect
विधि का उपयोग करना है। आपके द्वारा प्रदान किए जाने वाले बंद होने के माध्यम से प्रत्येक तत्व को प्रतिस्थापित करें, आखिरकार एक नया संग्रह लौटाएं (इसलिए, यह वास्तव में कुछ भी "संशोधित नहीं करता है)।
मूल रूप से, आप शायद कुछ इस तरह के लिए करना चाहेंगे: वहाँ वास्तव तरीके एक ग्रूवी में के बारे में इस तरह के एक कार्य के लिए जा सकते हैं की एक संख्या
def links = '''http://www.youtube.com/watch?v=fl6s1x9j4QQ
http://www.youtube.com/watch?v=tCvMKcNJCAY
'''
assert (links =~ /watch\?v=(.*)/).collect{match -> match[1]} == ["fl6s1x9j4QQ", "tCvMKcNJCAY"]
..Though।
इसके अतिरिक्त, Ted Naleid's blog में ग्रोवी पैटर्न मिलान के कुछ अच्छे उदाहरण हैं जो आपको उपयोगी मिल सकते हैं।
संपादित यहाँ कई तरीके है जिसमें आप समाधान आपके द्वारा भेजी संक्षिप्त कर सकते हैं:
youtubeLinks = youtubeLinks.collect{link -> (link =~ /\?v=(.*)$/)[0][1]}
या
youtubeLinks = youtubeLinks.collect{link -> link.replaceAll(/^.*\?v=/, "") }
या इस (हालांकि यह एक छोटे से काल्पनिक है)
youtubeLinks = youtubeLinks.join('\n').replaceAll(/.*\?v=/, '').split()
धन्यवाद! मैं इसे देख लूंगा। – user577905
मुझे आपके संपादन पसंद हैं। धन्यवाद! – user577905
कूल जवाब। लेकिन दूसरे लिंक पर वीडियो हटा दिया गया है = ( – epidemian