#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; } } // Немного более сложное решение значительно более быстрое. HashSetchecker = new HashSet (); foreach (byte b in arr) checker.Add(b); if (checker.Contains(to_check)) Console.WriteLine("Contains!"); } }
Комментариев нет:
Отправить комментарий