2010-04-05 25 views
14

ı C# değişken ve dizi var diyelim:Tüm Diziye Tek Bir Değerin Karşılaştırılması? (C#)

Ben variable_1 değeri array_1 döngü olmadan array_1 değerlerden herhangi birine eşit olup olmadığını kontrol edebilirsiniz nasıl
int variable_1 = 1; 
int[3] array_1 = {1,2,3}; 

?

+4

Döngü. Bir döngüye sahip uygulamanızda bir darboğaz (profil aracılığıyla) bulduysanız, daha hızlı ilerlemek için bir dizin ekleyebilirsiniz. .NET'te, bunu gerçekleştirmenin en kolay yolu, bir Sözlük veya HashSet'tir. –

cevap

26

Eh bir şey döngüsüne sahip. Aşağıdakilerden herhangi çalışacaktır:

bool exists = array.Contains(variable_1); 
bool exists = Array.IndexOf(array_1, variable_1) != -1; 
bool exists = Array.Exists(array_1, x => x == variable_1); 
bool exists = Array.FindIndex(array_1, x => x == variable_1) != -1; 
bool exists = array_1.Any(x => x == variable_1); 

lambda ifadesi kullanarak sürümleri Tüm bana overkill gibi hissediyorum, ama sen gerçek değerini bilmiyoruz bir durumda kendinizi bulursanız onlar potansiyel olarak faydalı olduğunu Sadece bir koşulu arıyorsun. Eğer dizi sıralandığını biliyorsanız

, şunları kullanabilirsiniz:

bool exists = Array.BinarySearch(array_1, variable_1) >= 0; 

olacak Yani O (log n) yerine (bütün diğerleri) (n) O, ancak gerektirir İlk sıralanacak dizi.

Şahsen normalde ilk formla devam ediyorum - .NET 3.5 veya üstünü kullandığınızı varsayarak.

birkaç öğeleri kontrol etmek için ihtiyaç ve dizi büyükse, bir HashSet<int> oluşturmak isteyebilirsiniz: bir miktar gerektirir bir çoklu değer yapısının iç varlığını denetlemek için Genel olarak

HashSet<int> hashSet = new HashSet<int>(array_1); 
bool exists = hashSet.Contains(variable_1); 
18
3.5'de

ve yukarı

array_1.Contains(variable_1); 

veya

array_1.IndexOf(variable_1) != -1 

2,0 Güncel:

+6

Sadece bir değer bulmak uğruna yeni bir liste oluşturmak benim için aşırı bir his veriyor. 2.0'da bile Array.IndexOf, Array.Exists, Array.FindIndex vb. Kullanabilirsiniz. –

+0

Gerçekten! array_1.IndexOf (variable_1)! = -1 işini yapmalı –

1

çeşitli seçenekler söz konusu olabilir mmm performansa kaydetmek için,

var hasItem = Array.Exists(array_1, x => x == variable_1); 
İlgili konular