Поиск минимального и максимального значения в массиве C#

Встречаю часто вопросы у студентов по поиску минимального значения в массиве, решил привести различные вариации поиска в разных массивах.

Поиск минимального значения в одномерном массиве с помощью Linq.

  static void Main(string[] args)
        {
            int[] num = { 2, 5, 6, 3, 7, 9, 1 };
            //Одномерный 
            Console.WriteLine(num.Min());

            Console.ReadKey();
        }

Поиск максимального значения в одномерном массиве с помощью Linq.

 static void Main(string[] args)
        {
          
                int[] num = { 2, 5, 6, 3, 7, 9, 1 }; //Одномерный
                Console.WriteLine(num.Max());

                Console.ReadKey();
        }

Поиск минимального значения в одномерном массиве с помощью цикла методом перебора.

     static void Main(string[] args)
        {
            int[] num = { 2, 5, 6, 3, 7, 9, 1 };
            //Одномерный 

            int tmpMin = int.MaxValue;
            for (int i = 0; i < num.Length; i++)
            {
                if (tmpMin > num[i])
                {
                    tmpMin = num[i];
                }
            }

            Console.WriteLine(tmpMin);

            Console.ReadKey();
        }

Поиск максимального значения в одномерном массиве с помощью цикла методом перебора.

    static void Main(string[] args)
        {
            int[] num = { 2, 5, 6, 3, 7, 9, 1 }; //Одномерный
            int tmpMax = int.MinValue;
            for (int i = 0; i < num.Length; i++)
            {
                if (tmpMax < num[i])
                {
                    tmpMax = num[i];
                }
            }
            Console.WriteLine(tmpMax);
            Console.ReadKey();
        }

Поиск минимального значения в многомерном массиве, с помощью Linq

Многомерный массив, в отличие от одномерного массива, не позволяет нам напрямую обратиться к методу Min. Но, это можно легко исправить, если воспользоваться методом Cast<T>, с помощью которого можно преобразовать многомерный массив в обобщенную коллекцию типа IEnumerable<T>. После чего нам станет доступен метод Min, и мы сможем найти минимальное значение массива, например:

        static void Main(string[] args)
        {
            int[,] numbers = { { 100, 20, 63, 39, 428, 118 }, { 22, 34, 63, 59, 68, 26 } };
            IEnumerable<int> colNumbs = numbers.Cast<int>();
            int minValue = colNumbs.Min();

            Console.WriteLine(minValue);

            Console.ReadKey();
        }

Поиск максимального значения в многомерном массиве, с помощью Linq

Поиск минимального значения в массив массивов, или зубчатом массиве.

   static void Main(string[] args)
        {
            int[,] numbers = { { 100, 20, 63, 39, 428, 118 }, { 22, 34, 63, 59, 68, 26 } }; 
            IEnumerable<int> colNumbs = numbers.Cast<int>(); 
            int maxValue = colNumbs.Max(); 
            Console.WriteLine(maxValue);
            Console.ReadKey(); 
        }

Чтобы найти минимальное значение в Jagged массиве, необходимо преобразовать содержимое массива в объект типа IEnumerable<T>. , но только выполнить эту операцию нужно не с помощью метода Cast, а например, с помощью метода SelectMany:

  static void Main(string[] args)
        {
            int[][] numbers = { new int [] {12,123,35,75,33}, new int [] {44,42,64,96}, new int [] {121,42,733,45}};
            int minValue = numbers.SelectMany(x => x).Min();
            Console.WriteLine(minValue);

            Console.ReadKey();
        }

Поиск максимального значения в массив массивов, или зубчатом массиве.

   static void Main(string[] args)
        { 
            int[][] numbers = { new int[] { 12, 123, 35, 75, 33 }, new int[] { 44, 42, 64, 96 }, new int[] { 121, 42, 733, 45 } };
            int maxValue = numbers.SelectMany(x => x).Max();
            Console.WriteLine(maxValue);
            Console.ReadKey();
        }

Заключение

C# предлагает несколько способов для нахождения минимума и максимума в массиве: от простого LINQ до ручной реализации. Выбор зависит от задач и предпочтений — для быстрой разработки подойдёт LINQ, а при необходимости в производительности или контроле — цикл for.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.