Допустим есть чисто прикладная задача: сортировка пузырьком в трехмерном массиве.
for (int i = 0; i < arr1.Rank; i++)
{
for (int j = 0; j < arr1.Rank; j++)
{
for (int l = 0; l < arr1.Rank; l++)
{
if (arr1[i, j, l] < arr1[i-1, j, l] || arr1[i, j, l] < arr1[i , j-1, l] || arr1[i, j, l] < arr1[i , j, l-1])
{
byte tmp = arr1[i, j, l];
arr1[i, j, l] = array[i - 1];
array[i - 1] = tmp;
}
}
}
}
Меня интересует вот эта часть :
if (arr1[i, j, l] < arr1[i-1, j, l] || arr1[i, j, l] < arr1[i , j-1, l] || arr1[i, j, l] < arr1[i , j, l-1])
{
byte tmp = arr1[i, j, l];
arr1[i, j, l] =
- если я пишу if одной конструкцией -то, что мне подставлять в эту строку arr1[i, j, l] =
? arr1[i , j-1, l]
или arr1[i, j, l]
или arr1[i , j,l-1])
? - т.е. как обратиться непосредственно к if у узнать результат операции в данном случае?
if
- условный оператор, не возвращающий каких-либо значений.
Возможность такое сделать есть, но учтите: её использование не является хорошим тоном.
Вместо использования этого метода рекомендую разделить блок if на 3 блока, содержащих лишь по одному условию. Если часть тела этого if-а используется несколько раз, можно использовать inline функции.
int from;
if ((arr1[i, j, l] < arr1[i-1, j, l] && Convert.ToBoolean(from = 1)) || (arr1[i, j, l] < arr1[i , j-1, l] && Convert.ToBoolean(from = 2)) || (arr1[i, j, l] < arr1[i , j, l-1] && Convert.ToBoolean(from = 3)))
{
byte tmp = arr1[i, j, l];
arr1[i, j, l] = array[i - 1];
array[i - 1] = tmp;
}
При выполнении одного из основных условий (таковыми назовём условия проверки, предоставленные Вами) выполняется дополнительное, цель которого - присвоить значение временной переменной.
Конвертация в boolean
делается для того, чтобы код работал (int
не является логическим типом, а с помощью конвертации преобразуется в bool, где всегда означает true
, главное не присваивать переменной from
значение 0
, тогда конвертация преобразует его в false
).
В данном случае временная переменная from
хранит номер условия, которое "пустило" выполнение в if.
Успехов!
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как можно сделать всплывающие окна? Например, дойдя до конца уровня, игра должна остановится, и в центре должно всплыть окно, мол: " Вы завершили...
Скажите пожалуйста, почему обнуляются все переменные класса CircleFigure?
Возникло несколько вопросов по работе транзакций в StackExchangeRedis:
Объясните мне, пожалуйста, человеческим языком, без заумных терминов, что такое IoC и DI контейнеры, для чего они используются и как ими пользоваться...