ArrayBSearch работает правильно.
ArrayBSearch расшифровывается как бинарный поиск в отсортированном массиве. Если массив содержит только уникальные элементы, то все ищется точно.
Если же есть повторяющиеся значения, то находится любая позиция, в которой присутствует поисковое значение. Такова реализация двоичного (делением пополам) поиска.
В данном случае Вам лучше написать свою линейную функцию поиска путем перебора. Или комбинированный поиск на основе ArrayBSearch и последующим откатом назад до первого значения.
ArrayBSearch расшифровывается как бинарный поиск в отсортированном массиве. Если массив содержит только уникальные элементы, то все ищется точно.
Если же есть повторяющиеся значения, то находится любая позиция, в которой присутствует поисковое значение. Такова реализация двоичного (делением пополам) поиска.
В данном случае Вам лучше написать свою линейную функцию поиска путем перебора. Или комбинированный поиск на основе ArrayBSearch и последующим откатом назад до первого значения.
2Renat
Подтверждаю.
Благодарю за разъяснение.
Не проблема, напишу, найду как мне нужно, но я думаю здесь именно тот случай когда абсолютное
большинство пользователей со мной согласится:
Лучше бы все-же доработать штатную функцию что-бы возвращаемый индекс вместо
был-бы
иначе нет смысла пользоваться функцией в чистом виде для поиска в массивах с повторяющимися значениями в первом измерении массива.
Я думаю уважаемый ALL согласится со мной что задавая поиск конкретного значения мы как правило
хотим найти именно ПЕРВЫЙ элемент соответствующий условию поиска и он всегда будет удовлетворять
условию "найти любой соответствующий". В данном же случае имеем обратное - ищется любой соответствующий который только в случае уникальных элементов действительно будет первым
Или я не прав. Как думаешь уважаемый ALL. И что думают по этому поводу разработчики.
Если массив содержит только уникальные элементы, то все ищется точно.
Подтверждаю.
Если же есть повторяющиеся значения, то находится любая позиция, в которой присутствует поисковое значение. Такова реализация двоичного (делением пополам) поиска.
Благодарю за разъяснение.
В данном случае Вам лучше написать свою ... функцию ...
.Не проблема, напишу, найду как мне нужно, но я думаю здесь именно тот случай когда абсолютное
большинство пользователей со мной согласится:
Лучше бы все-же доработать штатную функцию что-бы возвращаемый индекс вместо
... Возвращает индекс первого найденного элемента в первом измерении массива...
.был-бы
... Возвращает индекс первого найденного элемента в первом измерении массива...
.иначе нет смысла пользоваться функцией в чистом виде для поиска в массивах с повторяющимися значениями в первом измерении массива.
Я думаю уважаемый ALL согласится со мной что задавая поиск конкретного значения мы как правило
хотим найти именно ПЕРВЫЙ элемент соответствующий условию поиска и он всегда будет удовлетворять
условию "найти любой соответствующий". В данном же случае имеем обратное - ищется любой соответствующий который только в случае уникальных элементов действительно будет первым
Или я не прав. Как думаешь уважаемый ALL. И что думают по этому поводу разработчики.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
//+------------------------------------------------------------------+ //| Test_ARRAY.mq4 | //| Copyright © 2005, BSL | //| http://www. | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, BSL" #property link "http://www." int myarray[10][6]; myarray[0][0]=1;myarray[0][1]=4;myarray[0][2]=5;myarray[0][3]=10;myarray[0][4]=13;myarray[0][5]=94; myarray[1][0]=3;myarray[1][1]=1;myarray[1][2]=188;myarray[1][3]=2;myarray[1][4]=1;myarray[1][5]=0; myarray[2][0]=4;myarray[2][1]=2;myarray[2][2]=7;myarray[2][3]=12;myarray[2][4]=35;myarray[2][5]=4; myarray[3][0]=2;myarray[3][1]=1;myarray[3][2]=13;myarray[3][3]=6;myarray[3][4]=2;myarray[3][5]=0; myarray[4][0]=4;myarray[4][1]=2;myarray[4][2]=25;myarray[4][3]=18;myarray[4][4]=48;myarray[4][5]=5; myarray[5][0]=3;myarray[5][1]=2;myarray[5][2]=23;myarray[5][3]=6;myarray[5][4]=6;myarray[5][5]=1; myarray[6][0]=4;myarray[6][1]=2;myarray[6][2]=9;myarray[6][3]=10;myarray[6][4]=34;myarray[6][5]=6; myarray[7][0]=2;myarray[7][1]=2;myarray[7][2]=28;myarray[7][3]=24;myarray[7][4]=9;myarray[7][5]=2; myarray[8][0]=3;myarray[8][1]=4;myarray[8][2]=7;myarray[8][3]=4;myarray[8][4]=36;myarray[8][5]=86; myarray[9][0]=4;myarray[9][1]=1;myarray[9][2]=248;myarray[9][3]=27;myarray[9][4]=2;myarray[9][5]=0; int start() { int i,j; string mystr=""; for (i=0; i<ArrayRange(myarray,0); i++) { mystr="Несортированный myarray "+i+"="; for (j=0; j<ArrayRange(myarray,1); j++) { mystr=StringConcatenate(mystr,myarray[i][j],";"); } Print(mystr); } Print("Производим сортировку"); ArraySort(myarray); for (i=0; i<ArrayRange(myarray,0); i++) { mystr="Сортированный myarray "+i+"="; for (j=0; j<ArrayRange(myarray,1); j++) { mystr=StringConcatenate(mystr,myarray[i][j],";"); } Print(mystr); } Print("Производим поиск значения 1"); Print("Найденный элемент имеет индекс =", ArrayBsearch(myarray,1)); Print("Производим поиск значения 2"); Print("Найденный элемент имеет индекс =", ArrayBsearch(myarray,2)); Print("Производим поиск значения 3"); Print("Найденный элемент имеет индекс =", ArrayBsearch(myarray,3)); Print("Производим поиск значения 4"); Print("Найденный элемент имеет индекс =", ArrayBsearch(myarray,4)); return(0); }а результаты получаются вот такие:
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =9
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 4
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =4
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 3
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =2
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 2
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =0
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 1
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 9=4;2;9;10;34;6;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 8=4;1;248;27;2;0;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 7=4;2;7;12;35;4;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 6=4;2;25;18;48;5;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 5=3;2;23;6;6;1;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 4=3;1;188;2;1;0;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 3=3;4;7;4;36;86;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 2=2;2;28;24;9;2;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 1=2;1;13;6;2;0;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 0=1;4;5;10;13;94;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим сортировку
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 9=4;1;248;27;2;0;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 8=3;4;7;4;36;86;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 7=2;2;28;24;9;2;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 6=4;2;9;10;34;6;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 5=3;2;23;6;6;1;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 4=4;2;25;18;48;5;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 3=2;1;13;6;2;0;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 2=4;2;7;12;35;4;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 1=3;1;188;2;1;0;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 0=1;4;5;10;13;94;
Поскольку в help функции записано
Возвращает индекс первого найденного элемента в первом измерении массива
то соответственно хотелось бы получить результаты
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =6
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 4
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =3
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 3
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =1
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 2
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =0
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 1
Прошу разработчиков или людей понимающих суть проблеммы обьяснить происходящее:
Или я неправильно пользуюсь функцией ,
или я неправильно воспринимаю действительность,
или это глюк,
или это фишка.
Заранее благодарен.
ЗЫЖ используется билд 186.