C#. Как вернуть индекс определенного элемента массива?Почему ошибка?
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int c = Array.BinarySearch(data, 10);
Console.WriteLine(c);
Ожидал получить 0, но выдает ошибку. Что не так?
ДополненРешено. Проблема в типах данных.
int[] data = new int[]{ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
int c = Array.IndexOf(data, 10);
Console.WriteLine(c);
Вот рофл так рофл. Все ответы от чат GPT и все про массив не сортирован.
Отвечающие-лемминги - сами-то видели массив?
Проблема в том, что массив из байт, а в BinarySearch вторым параметром уходит int и всё это накрывается медным тазом. Соотв. либо используем int[] data либо приводим второй параметр int к byte
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int c = Array.BinarySearch(data, (byte)10);
Console.WriteLine(c);
Пруф:
https://onlinegdb.com/6pf58SHti1
Метод Array.BinarySearch используется для поиска элемента в отсортированном массиве. Он работает на основе алгоритма двоичного поиска и возвращает индекс искомого элемента. Однако в вашем случае массив data не отсортирован, так как содержит два элемента со значением 11 подряд. Из-за этого метод Array.BinarySearch не может корректно найти индекс элемента со значением 10 и возвращает ошибку.
Чтобы исправить эту проблему, вы можете отсортировать массив перед использованием метода Array.BinarySearch или использовать другой метод для поиска индекса элемента, например, метод Array.IndexOf:
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int c = Array.IndexOf(data, 10);
Console.WriteLine(c);
Этот код вернет ожидаемый результат: индекс элемента со значением 10 равен 0.
Вы можете использовать метод Array.IndexOf для получения индекса элемента в массиве. Вот пример:
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int index = Array.IndexOf(data, 13);
Console.WriteLine(index); // выведет 3
Вы можете изменить значение 13 на любое другое, чтобы найти индекс другого элемента.
Относительно вашего кода, метод Array.BinarySearch ищет элемент в отсортированном массиве и возвращает отрицательное число, если элемент не найден. Вам нужно проверить результат, прежде чем его использовать. Вот исправленный код:
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int index = Array.BinarySearch(data, 10);
if (index >= 0)
{
Console.WriteLine(index); // выведет 0
}
else
{
Console.WriteLine("Элемент не найден");
}
Если вы хотите использовать метод Array.BinarySearch, убедитесь, что массив отсортирован.
Ответ от GPT-3.5: Ошибка возникает потому, что метод BinarySearch требует, чтобы массив был отсортирован. В данном случае массив data не отсортирован, поэтому возникает ошибка. Для поиска индекса элемента в неотсортированном массиве можно использовать метод IndexOf:
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int c = Array.IndexOf(data, 10);
Console.WriteLine(c); // выводит 0
Метод Array.BinarySearch предназначен для поиска элемента в упорядоченном массиве, а массив data в вашем коде не является упорядоченным. Поэтому метод не может найти элемент 10 и возвращает отрицательное значение.
Чтобы получить индекс элемента в неупорядоченном массиве, можно воспользоваться методом Array.IndexOf следующим образом:
arduino
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int index = Array.IndexOf(data, 10);
Console.WriteLine(index);
Этот код вернет 0, потому что элемент 10 находится на нулевой позиции в массиве.