J'ai ce tableau de chaînes:
string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
Je voudrais déterminer si stringArray
contient value
. Si tel est le cas, je souhaite localiser sa position dans le tableau.
Je ne veux pas utiliser de boucles. Quelqu'un peut-il suggérer comment je pourrais le faire?
Vous pouvez utiliser la méthode 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)
On peut aussi utiliser 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"));
EDIT: Je n'avais pas remarqué que vous aviez également besoin du poste. Vous ne pouvez pas utiliser IndexOf
directement sur une valeur de type tableau, car elle est implémentée explicitement. Cependant, vous pouvez utiliser:
_IList<string> arrayAsList = (IList<string>) stringArray;
int index = arrayAsList.IndexOf(value);
if (index != -1)
{
...
}
_
(Ceci est similaire à l'appel Array.IndexOf
selon la réponse de Darin - juste une approche alternative. Je ne comprends pas bien pourquoi IList<T>.IndexOf
est implémenté explicitement dans les tableaux, mais peu importe ...)
Vous pouvez utiliser Array.IndexOf()
- notez qu'il retournera -1 si l'élément n'a pas été trouvé et que vous devez gérer ce cas.
int index = Array.IndexOf(stringArray, value);
vous pouvez essayer comme ça ... vous pouvez utiliser Array.IndexOf (), si vous voulez connaître la position aussi
string [] arr = {"One","Two","Three"};
var target = "One";
var results = Array.FindAll(arr, s => s.Equals(target));
Le meilleur moyen de vérifier si un tableau contient une valeur donnée consiste à utiliser la méthode System.Collections.Generic.IList<T>.Contains(T item)
de la manière suivante:
((IList<string>)stringArray).Contains(value)
Exemple de code complet:
string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
if (((IList<string>)stringArray).Contains(value)) Console.WriteLine("The array contains "+value);
else Console.WriteLine("The given string was not found in array.");
Les tableaux T[]
implémentent de manière privée quelques méthodes de List<T>
, telles que Count et Contains. Comme il s'agit d'une implémentation explicite (privée), vous ne pourrez pas utiliser ces méthodes sans avoir préalablement transtypé le tableau. Cela ne fonctionne pas seulement pour les chaînes - vous pouvez utiliser cette astuce pour vérifier si un tableau de n'importe quel type contient un élément quelconque, à condition que la classe de l'élément implémente IComparable.
N'oubliez pas que toutes les méthodes IList<T>
ne fonctionnent pas de cette façon. Essayer d'utiliser la méthode IList<T>
de Add sur un tableau échouera.
Vous pouvez essayer ceci, il recherche l'index contenant cet élément et définit le numéro d'index comme int, puis il vérifie si l'int est supérieur à -1, donc s'il vaut 0 ou plus, cela signifie qu'il l'a trouvé un index - comme les tableaux sont basés sur 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); }
}
J'ai créé une méthode d'extension pour la réutilisation.
public static bool InArray(this string str, string[] values)
{
if (Array.IndexOf(values, str) > -1)
return true;
return false;
}
Comment l'appeler:
string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
if(value.InArray(stringArray))
{
//do something
}