2010-04-05 15 views
14

Digamos que tengo una variable de # C y matriz:Comparando un valor en una matriz completa? (C#)

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

¿Cómo puedo comprobar si el valor de Variable_1 es igual a cualquiera de los valores en array_1 sin bucle a través de array_1?

+4

En general, para comprobar la existencia en el interior de una estructura de múltiples valores requerirá una cierta cantidad de bucle. Si ha encontrado un cuello de botella en su aplicación (por medio de un perfil) con un bucle, puede agregar un índice para que sea más rápido. En .NET, la forma más sencilla de lograr esto es probablemente un Dictionary o HashSet. –

Respuesta

26

Bueno alguna cosa tiene que repetir. Cualquiera de lo siguiente funcionará:

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

Todas las versiones utilizando una expresión lambda se siente como una exageración para mí, pero son potencialmente útil si usted se encuentra en una situación en la que no se conoce el valor real estás buscando, solo algunas condiciones

Si sabe que la matriz está ordenada, puede utilizar:

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

Eso será O (log n) en lugar de O (n) (que todos los demás son), pero sí requiere la matriz que se ordenará primero.

Personalmente, normalmente voy con el primer formulario, suponiendo que esté usando .NET 3.5 o superior.

Si necesita comprobar si hay varios artículos y la matriz es grande, es posible que desee crear un HashSet<int>:

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

en 3.5 y hasta

array_1.Contains(variable_1); 

o 2,0

array_1.IndexOf(variable_1) != -1 

Actualizado: para ahorrar en el rendimiento

+6

Crear una nueva lista solo por el bien de encontrar un valor me parece exagerado. Incluso en 2.0 puede usar Array.IndexOf, Array.Exists, Array.FindIndex etc. –

+0

¡De hecho! array_1.IndexOf (variable_1)! = -1 debería hacer el trabajo –

1

mmm no puede haber varias opciones,

var hasItem = Array.Exists(array_1, x => x == variable_1); 
Cuestiones relacionadas