2010-01-25 8 views
25

मैं जावा/पायथन के साथ चालू और बंद कर रहा हूं। अब इस स्थिति में मैं अगर तत्व सूची में है की जाँच करें और सामान करना चाहता हूँ ...यह जांचने के लिए एक लाइनर है कि तत्व सूची में है

अजगर का कहना है:

if "a" in ["a", "b", "c"]: 
    print "It's there!" 

जावा बल्कि ArrayList/सेट या बनाने की तुलना में इस के लिए किसी भी एक लाइनर प्रदान करता है चरणों में समान डेटा संरचना और इसमें तत्व जोड़ना?

धन्यवाद

उत्तर

56

उपयोग Arrays.asList:

if(Arrays.asList("a","b","c").contains("a")) 
+2

क्या यह कोई सूची नहीं बनाता है? – danben

+2

सूची सरणी के चारों ओर सिर्फ एक रैपर है, इसलिए यह बहुत हल्का है। बेशक, "इसमें शामिल है" सरणी के माध्यम से फिर से समाप्त होने जा रहा है, तो बिंदु क्या है? –

+0

@danben यकीन है, लेकिन यह एक उपयुक्त एक लाइनर है। –

7

वहाँ एक बूलियन शामिल (वस्तु obj) सूची इंटरफ़ेस के भीतर विधि है।

आप कहते हैं कि करने के लिए सक्षम होना चाहिए:

if (list.contains("a")) { 
    System.out.println("It's there"); 
} 

javadoc के अनुसार:

 
boolean contains(Object o)

Returns true if this list contains the specified element. More formally, returns true if and only if this list contains at least one element e such that (o==null ? e==null : o.equals(e)).

1

आप java.util.Arrays.binarySearch एक सरणी में एक तत्व को खोजने के लिए उपयोग कर सकते हैं या इसके अस्तित्व की जांच के लिए:

import java.util.Arrays; 
... 

char[] array = new char[] {'a', 'x', 'm'}; 
Arrays.sort(array); 
if (Arrays.binarySearch(array, 'm') >= 0) { 
    System.out.println("Yes, m is there"); 
} 

ध्यान रखें कि बाइनरी खोज के लिए सही तरीके से काम करने के लिए, सरणी को सॉर्ट करने की आवश्यकता है। इसलिए उदाहरण में Arrays.sort() को कॉल करें। यदि आपका डेटा पहले ही सॉर्ट किया गया है, तो आपको ऐसा करने की आवश्यकता नहीं है। इस प्रकार, यदि आप पहले अपनी सरणी को सॉर्ट करना चाहते हैं तो यह सख्ती से एक-लाइनर नहीं है। दुर्भाग्यवश, Arrays.sort() सरणी के संदर्भ को वापस नहीं करता है - इस प्रकार सॉर्ट और बाइनरी खोज (यानी Arrays.binarySearch (Arrays.sort (myArray), कुंजी) को गठबंधन करना संभव नहीं है)।

यदि आप अतिरिक्त आवंटन का भुगतान कर सकते हैं, Arrays.asList() का उपयोग करके क्लीनर लगता है।

0

वह वास्तव में, कोई भी संग्रह के बिना एक एक लाइनर चाहता है ठीक है, वह हो सकता है एक:

for(String s:new String[]{"a", "b", "c")) if (s.equals("a")) System.out.println("It's there"); 

* मुस्कान *

(नहीं है कि यह बदसूरत कृपया, उसका उपयोग नहीं करते वास्तविक कोड में)

2

आप किसी विभाजक के साथ स्ट्रिंग्स का उपयोग करने का प्रयास कर सकते हैं जो किसी भी तत्व में प्रकट नहीं होता है।

if ("|a|b|c|".contains("|a|")) 
7

JDK7 में:

if ({"a", "b", "c"}.contains("a")) { 

परियोजना सिक्का संग्रह शाब्दिक परियोजना मान लिया जाये कि के माध्यम से चला जाता है।

+0

यह लगभग समय है। उम्मीद है कि यह अपनाया जाता है। मैं जावा – I82Much

+1

की वर्बोजिटी से थक गया हूं अतिरिक्त 13 वर्ण शायद आपको मार नहीं पाएंगे। –

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