Öğe

2010-01-25 21 views
25

listesinde olup olmadığını kontrol etmek için bir liner Java/Python ile çalışıp çalışıyorum.Öğe

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

java yerine ArrayList/ayarla veya oluşturmak yerine Bunun için herhangi bir astar sağlar mı: Artık bu durumda ben

Python diyor ... eleman listesinde olup olmadığını kontrol etmek ve bir şeyler yapmak istiyorum benzer veri yapısı, adım adım ve buna öğeler eklemek?

Teşekkür

cevap

56

Kullanım Arrays.asList:

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

Bu bir Liste oluşturmuyor mu? – danben

+2

Liste sadece dizinin etrafındaki sarıcıdır, bu yüzden çok hafiftir. Tabii ki, "içerir" sadece dizi boyunca yinelenen sona erecek, bu yüzden ne anlamı var? –

+0

@danben emin, ancak uygun bir tek astarlı. –

7

bir boolean Liste arayüzü içinde (Object obj) yöntemini içerir yoktur.

Söyleyecek gerekir:

 
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)).

Bir dizideki öğeye bulmak için java.util.Arrays.binarySearch kullanabilirsiniz
1

ya: javadoc göre

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

Varlığını kontrol etmek için:

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"); 
} 

BinarySearch'ün doğru çalışması için dizinin sıralanması gerektiğini unutmayın. Bu nedenle, örnekte Arrays.sort() öğesine çağrı. Verileriniz zaten sıralanmışsa, bunu yapmanız gerekmez. Bu nedenle, önce dizininizi sıralamanız gerekiyorsa, kesinlikle bir tek liner değildir. Ne yazık ki, Arrays.sort() diziye bir başvuru döndürmez - bu nedenle sıralama ve binarySearch (yani Arrays.binarySearch (Arrays.sort (myArray), anahtar)) birleştirmek mümkün değildir)).

Ekstra ayırmayı karşılayabiliyorsanız, Arrays.asList() yöntemini kullanarak daha temiz görünüyor.

0

o gerçekten Tamam, o olabilir, herhangi koleksiyonları olmadan bir tek astar istiyorsa tek:?

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

* gülümseme *

(mı değil çirkin, bunu lütfen kullanmayın gerçek kodla)

2

Dizeleri, herhangi bir öğede görünmeyen bir ayırıcı ile kullanmayı deneyebilirsiniz.

JDK7 yılında
if ("|a|b|c|".contains("|a|")) 
7

: Proje Coin koleksiyonları değişmezleri projeyi varsayarsak

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

geçer.

+0

Zamanla ilgili. Umarım bu benimsenir. Java – I82Much

+1

'un ayrıntılarından bıktım. Fazladan 13 karakter muhtemelen sizi öldürmeyecek. –