Каков был бы лучший способ посмотреть в a string[]
видеть, содержит ли это элемент. Это было моим первым выстрелом в него. Но возможно существует что-то, что я пропускаю. Размер массива будет не больше, чем 200 элементов.
bool isStringInArray(string[] strArray, string key)
{
for (int i = 0; i <= strArray.Length - 1; i++)
if (strArray[i] == key)
return true;
return false;
}
Просто уже используйте встроенный, Содержит () метод:
using System.Linq;
//...
string[] array = { "foo", "bar" };
if (array.Contains("foo")) {
//...
}
Вы просто после Массива. Существует функция (или Содержит дополнительный метод, если Вы используете.NET 3.5, который немного более удобен).
Linq (для s& g's):
var test = "This is the string I'm looking for";
var found = strArray.Any(x=>x == test);
или, в зависимости от требований
var found = strArray.Any(
x=>x.Equals(test, StringComparison.OrdinalIgnoreCase));
Массив отсортирован? Раз так Вы могли сделать двоичный поиск . Вот реализация.NET также. , Если массив отсортирован затем, двоичный поиск улучшит производительность по любому повторяющемуся решению.
Массивы являются, в целом, плохой структурой данных, чтобы использовать, если Вы хотите спросить, находится ли конкретный объект в наборе или нет.
, Если Вы будете запускать этот поиск часто, это могло бы стоить того для использования Dictionary<string, something>
, а не массив. Поиски в Словаре являются O (1) (постоянно-разовый), в то время как поиск массива является O (N) (занимает время пропорциональный длине массива).
, Даже если массив является только 200 объектами самое большее, если Вы делаете много этих поисков, Словарь, вероятно, будет быстрее.
Можно также использовать LINQ для итерации по массиву. или можно использовать метод Находки, который берет делегата для поиска его. Однако я думаю, что метод находки является немного более дорогим затем просто цикличное выполнение через.
Это более быстро, чем итерация через массив вручную:
static bool isStringInArray(string[] strArray, string key)
{
if (strArray.Contains(key))
return true;
return false;
}