2011-03-04 13 views
11

यदि मेरे पास एक सेट है जो मुझे पता है कि एक तत्व है, तो इसे निकालने का सबसे अच्छा तरीका क्या है? सबसे अच्छा मैं के साथ आ सकते हैं यह है, लेकिन यह बहुत ग्रूवी महसूस नहीं करता: अच्छा बहुत से तरीके हैंग्रोवी में सेट से एकल मूल्य निकालने का सबसे अच्छा तरीका क्या है?

set = [1] as Set 
e = set.toList()[0] 
assert e == 1 

अगर मैं एक सूची के साथ काम कर रहा हूँ, मुझे मिल गया है, तत्व प्राप्त करने के लिए में से कोई भी जो समूह के साथ काम करने लगते हैं:

def list = [1] 
e = list[0] 
(e) = list 
e = list.head() 
+2

'ग्रोवी महसूस' एक बहुत ही व्यक्तिपरक चीज है। अगर मैं कोड लिख रहा था, तो मैं 'set.toList()। पहले() 'से खुश रहूंगा। :-) –

उत्तर

15

कुछ विकल्प हैं, उनमें से कोई भी बहुत सुंदर:

set.iterator()[0] 
set.find { true } 
set.collect { it }[0] 

अंत में, यह गारंटी है कि अगर सेट केवल एक आइटम है कि:

def e 
set.each { e = it } 

अंतर्निहित मुद्दे, ज़ाहिर है, कोई वें तत्व (चर्चा की in this question और this one) प्राप्त करने के लिए क्षमता है कि जावा सेट नहीं परिभाषित आदेश प्रदान करते हैं (जैसा कि the Javadoc में उल्लेख किया है) है, और इसलिए। इसलिए, किसी भी समाधान को सेट को किसी सूची में परिवर्तित करने के लिए हमेशा होता है।

मेरा अनुमान है कि पहले दो विकल्पों में से किसी एक को कम से कम डेटा-कॉपीिंग शामिल है, क्योंकि उन्हें सेट की पूरी सूची बनाने की आवश्यकता नहीं है, लेकिन एक-तत्व सेट के लिए, यह शायद ही कोई चिंता हो।

+1

[संग्रह.फिंड()] (http://docs.groovy-lang.org/latest/html/groovy-jdk/java/util/Collection.html#find()) विधि 1.8 के बाद से है। 1, जो 'set.find {true}' –

18

एक अन्य संभावना (जो जावा या ग्रूवी में काम करेंगे):

set.iterator().next() 
+0

से उपयोग करने के लिए थोड़ा छोटा है, अच्छा और साफ है। – Vincent

0

जावा 8 के बाद से, यहाँ एक और समाधान है कि दोनों जावा और ग्रूवी के लिए काम करेगा:

set.stream().findFirst().get() 
1

यहां तक ​​कि जब यह सवाल काफी पुराना है, मैं अपना थोड़ा सा सुंदर समाधान साझा कर रहा हूं।

(set as List).first() 
(set as List)[0] 

आप खाते में लेने के लिए अशक्त (इस सवाल में नहीं मामले) की जरूरत है:

(set as List)?.first() 
(set as List)?.get(index) 

आशा है कि यह मदद करता है! :)

संबंधित मुद्दे

 संबंधित मुद्दे