2009-06-26 30 views

Respuesta

7

¿Quiere decir para ver si la cadena está en la matriz? No recuerdo si las matrices admiten el método .Contains(), de lo contrario, cree una lista < string>, agregue su matriz a la lista a través de AddRange(), luego llame a list.Contains ({string to compare}). Devolverá un valor booleano que indica si la cadena está o no en la matriz.

+1

Correcto, en 2.0 tendría que hacer '(new List (array)). Contiene (targetString);' - pero a partir de 3.5 tiene el método de extensión IEnumerable .Contiene el método de extensión, por lo que también está disponible para matrices. – Groo

+1

En 2.0, puede verificar si la matriz contiene un valor específico o no con un simple 'Array.IndexOf (arr, val)> = 0'. –

5

Si usted está haciendo esto muchas veces con un único matriz, debe ordenar la matriz y la búsqueda binaria que:

Array.Sort(array); 
int index = Array.BinarySearch(array, input); 
// if (index < 0) 
//  does not exists, "items > ~index" are larger and "< ~index" are smaller 
// otherwise, "items > index" are larger and "< index" are smaller. 

de lo contrario sólo echa toda la gama ingenuamente:

bool exists = Array.IndexOf(array, input) >= 0; 
+1

Si va a hacerlo muchas veces, hay búsquedas más eficientes que una búsqueda binaria (suponiendo que sea razonablemente grande, de todos modos). Me gustaría buscar algo basado en hash, p. HashSet. –

+1

Sí. El debate de la tabla de hash/árbol binario de búsqueda ... Ambos son mejores que buscar todo el conjunto, sin embargo. HashSet solo está disponible en 3.5 embargo. –

31

¿Qué tipo de comparación quieres? ¿Desea saber si la cadena dada está en la matriz?

bool targetStringInArray = array.Contains(targetString); 

¿Desea una matriz de valores de comparación (positivo, negativo, cero)?

var comparisons = array.Select(x => targetString.CompareTo(x)); 

Si usted está comprobando para la contención (es decir, la primera opción) y vas a hacer esto con múltiples cadenas, probablemente sería mejor construir un HashSet<string> de la matriz:

var stringSet = new HashSet<string>(array); 

if (stringSet.Contains(firstString)) ... 
if (stringSet.Contains(secondString)) ... 
if (stringSet.Contains(thirdString)) ... 
if (stringSet.Contains(fourthString)) ... 
Cuestiones relacionadas