Как узнать что вернуло if

195
10 февраля 2018, 21:29

Допустим есть чисто прикладная задача: сортировка пузырьком в трехмерном массиве.

 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 у узнать результат операции в данном случае?

Answer 1

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.

Успехов!

READ ALSO
Unity3D(C#) - Как сделать всплыаающие окна?

Unity3D(C#) - Как сделать всплыаающие окна?

Как можно сделать всплывающие окна? Например, дойдя до конца уровня, игра должна остановится, и в центре должно всплыть окно, мол: " Вы завершили...

181
Обнуляются переменные класса

Обнуляются переменные класса

Скажите пожалуйста, почему обнуляются все переменные класса CircleFigure?

235
StackExchange.Redis: несколько вопросов по транзакциям

StackExchange.Redis: несколько вопросов по транзакциям

Возникло несколько вопросов по работе транзакций в StackExchangeRedis:

186
IoC и DI контейнеры в C#

IoC и DI контейнеры в C#

Объясните мне, пожалуйста, человеческим языком, без заумных терминов, что такое IoC и DI контейнеры, для чего они используются и как ими пользоваться...

208