2010-10-28 7 views
17

मैं एक लूप के भीतर से ग्रोवी में किसी सूची से किसी आइटम को निकालने का तरीका जानने का प्रयास कर रहा हूं।मैं एक सूची के माध्यम से कैसे लूप और groovy में एक आइटम को हटा सकते हैं?

static main(args) { 
    def list1 = [1, 2, 3, 4] 
    for(num in list1){ 
    if(num == 2) 
     list1.remove(num) 
    } 
    println(list1) 
} 
+0

बस स्पष्ट करने के लिए। मुझे पता है कि मुझे लूप की आवश्यकता नहीं है, लेकिन यह दर्शाता है कि मैं उदाहरण में अतिरिक्त तर्क का एक गुच्छा डाले बिना क्या करने की कोशिश कर रहा हूं। – ScArcher2

उत्तर

12

आप सूचकांक 2 के साथ आइटम को निकालना चाहते हैं, तो आप

list = [1,2,3,4] 
list.remove(2) 
assert list == [1,2,4] 

// or with a loop 
list = [1,2,3,4] 
i = list.iterator() 
2.times { 
    i.next() 
} 
i.remove() 
assert list == [1,2,4] 

कर सकते हैं आप, आप कर सकते हैं मूल्य 2 के साथ (प्रथम) आइटम निकालना चाहते हैं

list = [1,2,3,4] 
list.remove(list.indexOf(2)) 
assert list == [1,3,4] 

// or with a loop 
list = [1,2,3,4] 
i = list.iterator() 
while (i.hasNext()) { 
    if (i.next() == 2) { 
     i.remove() 
     break 
    } 
} 
assert list == [1,3,4] 
+0

, यह वास्तव में काम नहीं करता है। 'i = my.object.here.iterator()' – Sliq

+0

काम नहीं करता है यह सूचियों के साथ काम करता है। इसे किसी भी ऑब्जेक्ट के साथ काम करना चाहिए जो 'Iterable' इंटरफ़ेस लागू करता है या' iterator() 'विधि है। – ataylor

4

मुझे लगता है कि आप कर सकते हैं:

list - 2; 

या ...

list.remove(2) 

कोई पाश की आवश्यकता है।

यदि आप एक लूप का उपयोग करना चाहते हैं तो मुझे लगता है कि आप वास्तव में आइटम को हटाने के लिए इटरेटर का उपयोग कर देख सकते हैं।

import java.util.Iterator; 

static main(args) { def list1 = [1, 2, 3, 4] 
    Iterator i = list1.iterator(); 
    while (i.hasNext()) { 
     n = i.next(); 
     if (n == 2) i.remove(); 
    } 
    println(list1) 
}​ 

लेकिन मुझे नहीं लगता कि आप ऐसा क्यों करना चाहते हैं।

+0

उदाहरण वास्तव में केवल कुछ असली दुनिया की स्थिति का उदाहरण था। मैं हटाने के लिए इटरेटर का उपयोग कर समाप्त हुआ और यह बहुत अच्छा काम किया। धन्यवाद! – ScArcher2

17
list = [1, 2, 3, 4] 
newList = list.findAll { it != 2 } 

आप सभी लेकिन 2

बेशक आप पाश की आवश्यकता होती है के लिए एक कारण हो सकता है देना चाहिए?

+0

यह जावा के समवर्ती मोडिफिकेशन अपवाद को समझाता नहीं है कि ओपी (मूल पोस्टर) प्राप्त हुआ था (उस मुद्दे पर सबसे अधिक संभावित समाधान जावा दुनिया में CopyOnWriteArrayList का उपयोग करना होगा), लेकिन, मेरी आंखों में, यह सबसे व्यावहारिक तरीका है ग्रूवी। - कृपया, अतिरिक्त रूप से, प्रत्येक व्यक्ति ध्यान दें कि List.remove (int) विधि List.remove ((ऑब्जेक्ट) int) विधि से अलग है। – robbbert

+0

ग्रोवी में जब आप पूर्णांक की सूची रखते हैं तो यह इंडेक्स द्वारा हटा देता है। हकीकत में – ScArcher2

6

जैसा कि आप अपनी टिप्पणी में बताते हैं कि आपको विशेष रूप से लूप की आवश्यकता नहीं है .... यदि आप अपनी मूल सूची को संशोधित करने में प्रसन्न हैं तो आप removeAll:

का उपयोग कर सकते हैं
// Remove all negative numbers 
list = [1, 2, -4, 8] 
list.removeAll { it < 0 } 
संबंधित मुद्दे