Встречаю часто вопросы у студентов по поиску минимального значения в массиве, решил привести различные вариации поиска в разных массивах.
Поиск минимального значения в одномерном массиве с помощью 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.
