2010-04-05 16 views
14

Powiedzmy mam # zmienną i tablicę C:Porównywanie jednej wartości do całej tablicy? (C#)

int variable_1 = 1; 
int[3] array_1 = {1,2,3}; 

Jak mogę sprawdzić, czy wartość variable_1 jest równa dowolnej wartości w tablica_1 bez zapętlenie poprzez tablica_1?

+4

W ogóle, w celu sprawdzenia istnienia wewnątrz struktury wielo-wartość będzie wymagać pewnej ilości pętli. Jeśli natrafiłeś na wąskie gardło w swojej aplikacji (za pomocą profilu) z pętlą, możesz dodać indeks, aby działał szybciej. W .NET najprostszym sposobem na osiągnięcie tego jest prawdopodobnie Słownik lub HashSet. –

Odpowiedz

26

Dobrze coś musi zapętlić. Każda z poniższych zadziała:

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

Wszystkie wersje z wykorzystaniem wyrażenia lambda ochoty overkill do mnie, ale są one potencjalnie użyteczne, jeśli znajdziesz się w sytuacji, w której się nie zna rzeczywistej wartości którego szukasz - po prostu jakiś warunek.

Jeśli wiesz, że tablica jest posortowana, można użyć:

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

To będzie O (log n) zamiast O (n) (który wszyscy inni), ale wymaga tablica do posortowania jako pierwsza.

Osobiście zwykle korzystam z pierwszej formy - zakładając, że używasz .NET 3.5 lub wyższej.

Jeśli trzeba sprawdzić kilka elementów, a tablica jest duża, może chcesz stworzyć HashSet<int>:

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

w 3,5 i aż

array_1.Contains(variable_1); 

lub 2,0

array_1.IndexOf(variable_1) != -1 

Aktualizacja: aby zaoszczędzić na wydajność

+6

Tworzenie nowej listy tylko w celu znalezienia wartości wydaje mi się przesadą. Nawet w 2.0 możesz użyć Array.IndexOf, Array.Exists, Array.FindIndex itd. –

+0

Rzeczywiście! array_1.IndexOf (variable_1)! = -1 powinien wykonać zadanie –

1

MMM mogą istnieć różne opcje,

var hasItem = Array.Exists(array_1, x => x == variable_1); 
Powiązane problemy