Как найти индекс максимального или минимального элемента массива?

Нахождение индекса максимального и минимального элемента массива

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

Как найти индекс минимального элемента массива?

Сначала нужно найти минимальный элемент массива, а затем воспользоваться одним из ниже приведенных примеров.

Одномерный массив

Для нахождения индекса минимального элемента в одномерном массиве можно воспользоваться методом IndexOf класса Array, например:

int [] numbers = {20, 13, 562, 1, 900, 78};
//1. Находим минимальное значение
int minVal = numbers.Min(); //1
//2. Находим индекс
int indexMin = Array.IndexOf(numbers, minVal);
//Результат: 3

Этот же результат можно получить и с помощью метода FindIndex всё того же класса Array, например:

int indexMin = Array.FindIndex(numbers, x => x == minVal);

Если в массиве будет найдено два или более одинаковых минимальных или максимальных значений, то тогда будет получен индекс самого первого из них. Если нужно получить индекс последнего найденного элемента, то тогда можно воспользоваться методом FindLastIndex, например:

int [] numbers = { 20, 1, 562, 10, 900, 78, 1 };
int minVal = 1;
int lastIndexMin = Array.FindLastIndex(numbers,x => x == minVal);
//Результат: 6

Многомерный массив

С помощью методов: IndexOf и FindIndex можно найти индекс элемента только в одномерном массиве. В многомерном массиве индекс элемента будет иметь значения вида: array[0, 0] и найти его можно, например, с помощью обычного цикла for.

int[,] numbers = { { 100,30,6,8,18,17 }, { 2,3,61,69,8,56 } };
//1. Находим минимальный элемент
IEnumerableint> colNumbs = numbers.Castint>();
int minVal = colNumbs.Min(); //2
//2. Находим индекс минимального элемента
for (int i = 0; i < numbers.GetLength(0); i++)
{
for (int j = 0; j < numbers.GetLength(1); j++)
{
if (numbers[i, j].Equals(minVal))
{
Console.Write(i + "-" + j);
//выход из цикла
 i = numbers.GetLength(0);
break;
}
}
}
//Результат: 1-0

Если в многомерном массиве будет несколько одинаковых минимальных или максимальных значений, то тогда можно убрать часть, отвечающую за выход из цикла и получить индекс каждого найденного элемента, например:

int[,] numbers = { { 100,2,6,8,18,17 }, { 2,3,61,69,8,56 } };
int minVal = 2;
if (numbers[i, j].Equals(minVal))
{
Console.WriteLine(i + "-" + j);
}
//Результат: 0-1, 1-0

Jagged массив

В Jagged массиве каждый элемент представляет собой отдельный массив. Чтобы найти индекс самого минимального значения в массиве также воспользуемся циклом for.

int[][] numbers = { new int [] {12,13,6,7,8},
new int [] {99,4,6,3,90},
new int [] {11,22,77,55}};
//1. Находим минимальный элемент
int minVal = numbers.SelectMany(x => x).Min();
//находим его индекс
for (int i = 0; i < numbers.Length; i++)
{
for (int j = 0; j < numbers[i].Length; j++)
{
if (numbers[i][j].Equals(minVal))
{
Console.Write(i + "-" + j);
//выход из цикла
i = numbers[i].Length;
break;
}
}
}
//Результат: 1-3

Как найти индекс максимального значения?

Всё то же самое, только сначала нужно найти максимальный элемент массива.

Читайте также:

One Comment

  1. Сергей says:

    Очень полезный ресурс. Вот это полезно //выход из цикла
    i = numbers[i].Length;
    break;
    но необязательно.

Leave a Reply

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

*