Comprobando si una matriz de cadenas contiene un valor, y si es así, obteniendo su posición

Tengo este conjunto de cadenas:

string[] stringArray = { "text1", "text2", "text3", "text4" }; string value = "text3"; 

Me gustaría determinar si stringArray contiene value . Si es así, quiero ubicar su posición en la matriz.

No quiero usar loops. ¿Alguien puede sugerir cómo podría hacer esto?

Puede usar el método Array.IndexOf :

 string[] stringArray = { "text1", "text2", "text3", "text4" }; string value = "text3"; int pos = Array.IndexOf(stringArray, value); if (pos > -1) { // the array contains the string and the pos variable // will have its position in the array } 
 var index = Array.FindIndex(stringArray, x => x == value) 

EDITAR: No me había dado cuenta de que también necesitabas el puesto. No puede usar IndexOf directamente en un valor de un tipo de matriz, porque está implementado explícitamente. Sin embargo, puedes usar:

 IList arrayAsList = (IList) stringArray; int index = arrayAsList.IndexOf(value); if (index != -1) { ... } 

(Esto es similar a llamar a Array.IndexOf según la respuesta de Darin, solo un enfoque alternativo. No tengo claro por qué IList.IndexOf se implementa explícitamente en matrices, pero no importa …)

También podemos usar Exists

 string[] array = { "cat", "dog", "perl" }; // Use Array.Exists in different ways. bool a = Array.Exists(array, element => element == "perl"); bool c = Array.Exists(array, element => element.StartsWith("d")); bool d = Array.Exists(array, element => element.StartsWith("x")); 

Puede usar Array.IndexOf() : tenga en cuenta que devolverá -1 si no se ha encontrado el elemento y debe manejar este caso.

 int index = Array.IndexOf(stringArray, value); 

puedes intentarlo así … puedes usar Array.IndexOf (), si quieres saber la posición también

  string [] arr = {"One","Two","Three"}; var target = "One"; var results = Array.FindAll(arr, s => s.Equals(target)); 

OMI: la mejor forma de comprobar si una matriz contiene un valor determinado es usar el método System.Collections.Generic.IList.Contains(T item) la siguiente manera:

 ((IList)stringArray).Contains(value) 

Ejemplo de código completo:

 string[] stringArray = { "text1", "text2", "text3", "text4" }; string value = "text3"; if (((IList)stringArray).Contains(value)) Console.WriteLine("The array contains "+value); else Console.WriteLine("The given string was not found in array."); 

T[] arrays T[] implementan de forma privada algunos métodos de List , como Count and Contains. Debido a que se trata de una implementación explícita (privada), no podrá usar estos métodos sin convertir primero la matriz. Esto no solo funciona para cadenas: puede usar este truco para verificar si una matriz de cualquier tipo contiene algún elemento, siempre que la clase del elemento implemente IComparable.

Tenga en cuenta que no todos IList métodos IList funcionan de esta manera. Intentar utilizar el método Add de IList en una matriz fallará.

Creé un método de extensión para reutilizar.

  public static bool InArray(this string str, string[] values) { if (Array.IndexOf(values, str) > -1) return true; return false; } 

Cómo llamarlo:

 string[] stringArray = { "text1", "text2", "text3", "text4" }; string value = "text3"; if(value.InArray(stringArray)) { //do something } 

Puedes probar esto, busca el índice que contiene este elemento, y establece el número de índice como int, luego verifica si el int es mayor que -1, así que si es 0 o más, entonces significa que encontró tal un índice, ya que las matrices están basadas en 0.

 string[] Selection = {"First", "Second", "Third", "Fourth"}; string Valid = "Third"; // You can change this to a Console.ReadLine() to //use user input int temp = Array.IndexOf(Selection, Valid); // it gets the index of 'Valid', // in our case it's "Third" if (temp > -1) Console.WriteLine("Valid selection"); } else { Console.WriteLine("Not a valid selection"); } 
 string x ="Hi ,World"; string y = x; char[] whitespace = new char[]{ ' ',\t'}; string[] fooArray = y.Split(whitespace); // now you have an array of 3 strings y = String.Join(" ", fooArray); string[] target = { "Hi", "World", "VW_Slep" }; for (int i = 0; i < target.Length; i++) { string v = target[i]; string results = Array.Find(fooArray, element => element.StartsWith(v, StringComparison.Ordinal)); // if (results != null) { MessageBox.Show(results); } } 

El método más simple y más corto sería el siguiente.

 string[] stringArray = { "text1", "text2", "text3", "text4" }; string value = "text3"; if(stringArray.Contains(value)) { // Do something if the value is available in Array. } 
 string[] strArray = { "text1", "text2", "text3", "text4" }; string value = "text3"; if(Array.contains(strArray , value)) { // Do something if the value is available in Array. }