Проверка наличия строкового массива, и если да, то его позиция
У меня есть этот массив строк:
string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
Я хотел бы определить, содержит ли stringArray
value
. Если это так, я хочу найти его позицию в массиве.
Я не хочу использовать циклы. Может ли кто-нибудь предложить, как я могу это сделать?
Ответы
Ответ 1
Вы можете использовать метод 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
}
Ответ 2
var index = Array.FindIndex(stringArray, x => x == value)
Ответ 3
Мы также можем использовать 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"));
Ответ 4
EDIT: Я не заметил, что вам тоже нужна была позиция. Вы не можете использовать IndexOf
непосредственно для значения типа массива, потому что оно реализовано явно. Однако вы можете использовать:
IList<string> arrayAsList = (IList<string>) stringArray;
int index = arrayAsList.IndexOf(value);
if (index != -1)
{
...
}
(Это похоже на вызов Array.IndexOf
в соответствии с ответом Дарина - просто альтернативный подход. Мне непонятно, почему IList<T>.IndexOf
реализуется явно в массивах, но неважно...)
Ответ 5
Вы можете использовать Array.IndexOf()
- отметить, что он вернет -1, если элемент не был найден, и вам придется обрабатывать этот случай.
int index = Array.IndexOf(stringArray, value);
Ответ 6
вы можете попробовать вот так: вы можете использовать Array.IndexOf(), если вы хотите знать позицию также
string [] arr = {"One","Two","Three"};
var target = "One";
var results = Array.FindAll(arr, s => s.Equals(target));
Ответ 7
IMO лучший способ проверить, содержит ли массив заданное значение, использовать метод System.Collections.Generic.IList<T>.Contains(T item)
следующим образом:
((IList<string>)stringArray).Contains(value)
Код полного кода:
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.");
T[]
массивы в частном порядке реализуют несколько методов List<T>
, таких как Count и Contains. Поскольку это явная (частная) реализация, вы не сможете использовать эти методы без первого массива. Это не только работает для строк - вы можете использовать этот трюк, чтобы проверить, содержит ли массив любого типа какой-либо элемент, если класс элемента реализует IComparable.
Помните, что не все методы IList<T>
работают таким образом. Попытка использования метода IList<T>
Добавить метод в массиве завершится с ошибкой.
Ответ 8
Вы можете попробовать это, он ищет индекс, содержащий этот элемент, и устанавливает индексный номер как int, а затем проверяет, превышает ли значение int -1, поэтому, если оно равно 0 или больше, значит, это означает он нашел такой индекс - поскольку массивы основаны на 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 "Third"
if (temp > -1)
Console.WriteLine("Valid selection");
}
else
{
Console.WriteLine("Not a valid selection");
}
Ответ 9
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); }
}
Ответ 10
Я создал метод расширения для повторного использования.
public static bool InArray(this string str, string[] values)
{
if (Array.IndexOf(values, str) > -1)
return true;
return false;
}
Как это называется:
string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
if(value.InArray(stringArray))
{
//do something
}
Ответ 11
string[] strArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
if(Array.contains(strArray , value))
{
// Do something if the value is available in Array.
}
Ответ 12
Самый простой и короткий метод будет следующим.
string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
if(stringArray.Contains(value))
{
// Do something if the value is available in Array.
}