Как лучше всего посмотреть, 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;
}
(new string[] { "foo", "bar" }).Contains("foo")
new[] { "foo", "bar" }.Contains(foo)
Я знаю, что это старый, но я хотел, чтобы новые читатели знали, что есть новый метод, позволяющий сделать это, используя универсальные методы и методы расширения.
Вы можете прочитать мое сообщение в блоге, чтобы узнать больше о том, как это сделать, но основная идея такова:
Добавив этот метод расширения в свой код:
вы можете выполнить свой поиск следующим образом:
Он работает с любым типом (если вы создаете хороший метод равенства). Любой тип значения точно.
источник
var xxx = csvData.Rows[0].ItemArray[0].IsIn(".00", "0.0", ".25", "0.5", ".5", ".50", ".75");
что я хочу сделать, это просмотреть список данных who в первом столбце, чтобы увидеть, не заканчиваются ли значения какой-либо из следующих строк ... если нет, то я хочу вернуть строку, в которой говорится, что в нем отсутствует значение,.00
например, используя ваш пример. Я не могу заставить его работать, это немного сложнее, так как я не хочу возвращать bool. Я изменил ваш метод, чтобы вернуть строку, но все еще не работает никаких предложенийpublic static bool EndWithValue(this string value, IEnumerable<string> values) { return values.Any(item => value.EndsWith(item)); }
Вы просто выбираете функцию Array.Exists (или метод расширения Contains, если вы используете .NET 3.5, что немного удобнее).
источник
Linq (для s&g):
или, в зависимости от требований
источник
Массив отсортирован? Если да, вы можете выполнить двоичный поиск . Вот и реализация .NET. Если массив отсортирован, то двоичный поиск повысит производительность по сравнению с любым итеративным решением.
источник
Массивы, как правило, представляют собой плохую структуру данных для использования, если вы хотите спросить, находится ли конкретный объект в коллекции или нет.
Если вы будете часто выполнять этот поиск, возможно, стоит использовать
Dictionary<string, something>
вместо массива. Поиск в словаре - O (1) (постоянное время), а поиск по массиву - O (N) (время, пропорциональное длине массива).Даже если в массиве не более 200 элементов, если вы будете выполнять много таких поисков, словарь, вероятно, будет быстрее.
источник
Вы также можете использовать LINQ для перебора массива. или вы можете использовать метод Find, который использует делегата для его поиска. Однако я думаю, что метод поиска немного дороже, чем простой цикл.
источник
Как неоднократно упоминалось в потоке выше, это зависит от используемой структуры. .Net Framework 3 и выше имеет методы .Contains () или Exists () для массивов. Для других фреймворков, представленных ниже, можно выполнить следующий трюк вместо цикла по массиву ...
Не уверен в эффективности ... Дэйв
источник
Это быстрее, чем перебирать массив вручную:
источник
Если вы не хотите или просто не можете использовать Linq, вы также можете использовать статическую
Array.Exists(...);
функцию:https://msdn.microsoft.com/en-us/library/yw84x8be%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
Когда Predicate действительно вернет true, однажды catInside также будет истинным.
источник