Top.Mail.Ru
Ответы

C#. Как вернуть индекс определенного элемента массива?Почему ошибка?

1234
  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 для получения индекса элемента в массиве. Вот пример:

1234
 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 ищет элемент в отсортированном массиве и возвращает отрицательное число, если элемент не найден. Вам нужно проверить результат, прежде чем его использовать. Вот исправленный код:

1234567891011
 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 находится на нулевой позиции в массиве.