Я хочу начать поиск int в моем массиве с конца массива, а не в начале. Как мне это сделать?
Имейте в виду, что это 2D-массив.
редактировать кто-то спрашивал, как я ищу с самого начала:
В моем файле кода я печатаю матрицу размером 8x8, отображающую случайные числа (1-10). Пользователь дает число для поиска в матрице, а код возвращает позицию, в которой число найдено ПЕРВЫМ:
Position position = new Position();
Position LookForNumber(int[,] matrix, int findNumber)
{
for (int r = 0; r < matrix.GetLength(0); r++)
{
for (int c = 0; c < matrix.GetLength(1); c++)
{
if (matrix[r, c] == findNumber)
{
Console.WriteLine("Your number {0} first appears on position {1},{2}", findNumber, r, c);
position.row = r;
position.column = c;
return position;
}
}
}
return position;
}
Теперь я хочу найти последнюю позицию номера, от которого отказался пользователь.
for(int i = array.length; i>0; i--) - это то, что вы ищете?
@eocron Я отредактировал свой пост.
Я отредактировал свой ответ на основе вашего редактирования вопроса





Для поиска в 2D-массиве вам понадобятся 2 цикла, однако вы можете выполнять циклы в обратном порядке:
Position LookForNumber(int[,] matrix, int findNumber)
{
Position position = new Position();
for (int r = matrix.GetLength(0) - 1; r >= 0 ; r--)
{
for (int c = matrix.GetLength(1) - 1; c >= 0 ; c--)
{
if (matrix[r, c] == findNumber)
{
Console.WriteLine("Your number {0} first appears on position
{1},{2}", findNumber, r, c);
position.row = r;
position.column = c;
return position;
}
}
}
return null;
}
Ненавижу, когда побеждает ответ на копипаст :(
@GilSand Я на самом деле написал совершенно другой ответ, отредактировал и использовал код OP после того, как он отредактировал свой вопрос, чтобы наилучшим образом соответствовать его вопросу, вы можете проверить правки, чтобы ответить;)
Тот факт, что массив является 2D, не имеет отношения к вашей проблеме.
Посмотрите, как работают самые обычные базовые петли?
for (int i = 0; i < array.length ; i++)
{
...
}
По сути, вы делаете это, если вам нужно было перевести код на английский
Для всех элементов, начиная с0что мы назначаемi, останавливаясь, не доезжая доarray.length, иadding 1 to i between each iteration, сделайте следующее(...)
Так что все, что вам действительно нужно сделать, это изменить параметры цикла.
Например, вы могли бы сказать, что вашей начальной точкой (то есть i) может быть что-то другое, кроме 0. Что бы вы использовали вместо нуля, если хотите начать с конца вашего массива?
Затем, если вы начинаете с конца, можете ли вы действительно ДОБАВИТЬ значения в i между каждой итерацией? Не совсем, вы бы вышли за пределы, так что же вам делать вместо i++?
В этот момент вам понадобится точка остановки, если вы выполняете итерацию от начала до конца. И ответ заключается в следующем: моя точка остановки - начало массива. Таким образом, средний параметр вашего цикла (который является точкой остановки) должен быть чем-то, что представляет начало вашего массива. Как бы вы это записали?
Обратите внимание, что вы также можете перебирать каждый второй элемент, например, теперь, когда вы понимаете логику.
И тот факт, что вы находитесь в 2D-цикле, означает, что вам нужен один внутренний цикл внутри вашего основного цикла, который будет работать так же, как и внешний цикл. Представьте себе индексы как холст с координатами, а не просто линию с точками.
Если вы не поняли всего, что я имел в виду, я просто запишу ответ, но я думаю, что объяснение достаточно ясное, чтобы вы поняли :)
Спасибо за объяснение, действительно полезное.
Приведите пример того, как вы выполняете поиск с начала, и мы исправим это для поиска с конца. Мы это даже объясняем.