Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Проверка на вхождение элемента в массив

#c_sharp #массивы


Добрый вечер!
Есть двумерный массив arr и некорректная проверка на вхождение цифры 1.

byte[,] arr = new byte[,]{{1, 1, 1}, {1, 1, 1}}; // массив arr

if (arr.Exists (1)) { // проверка на вхождение

// ...

}


Как правильно записать условие?
    


Ответы

Ответ 1



Вариант с расширяющим методом public static class SquareArrayExtension { public static bool Contains(this byte[,] array, byte value) { for (int i = 0; i < array.GetLength(0); i++) { for (int j = 0; j < array.GetLength(1); j++) { if (value == array[i, j]) { return true; } } } return false; } } Пользоваться так static void Main(string[] args) { byte[,] array = { { 1, 1, 1}, { 1, 1, 1} }; bool exists = array.Contains(5); Console.WriteLine(exists); Console.ReadLine(); }

Ответ 2



Приведите свой массив к IEnumerable и можете использовать Linq: if (arr.Cast().Any(x => x == 1))

Ответ 3



Напишу два решения - для случая когда данных достаточно много и когда нужно проверять вхождение много раз, для такого случая наиболее быстрым будет использовать HashSet, а также для случая если массив не большой или запросов не много, для этого достаточно простой проверки циклом. Вот код на C#, можно запустить онлайн: using System; using System.Collections.Generic; class ArrayContains { static void Main() { byte[,] arr = {{1, 2, 3}, {4, 5, 6}}; byte to_check = 3; // Простейшее медленное решение. foreach (byte b in arr) { if (b == to_check) { Console.WriteLine("Contains!"); break; } } // Немного более сложное решение значительно более быстрое. HashSet checker = new HashSet(); foreach (byte b in arr) checker.Add(b); if (checker.Contains(to_check)) Console.WriteLine("Contains!"); } }

Комментариев нет:

Отправить комментарий