2016-05-20 4 views
-1

Я хотел бы знать, есть ли способ упростить этот цикл. Я пробовал несколько способов, но я не знаю, стоит ли даже стоить.C# Для оптимизации цикла

public void FillWalls() 
    { 
     //Fill Top 
     for (int i = 0; i < lenY; i++) 
     { 
      map[0, i] = wall; 
      map[1, i] = wall; 
     } 
     //Fill Bottom 
     for (int i = 0; i < lenY; i++) 
     { 
      map[lenX - 2, i] = wall; 
      map[lenX - 1, i] = wall; 
     } 
     //Fill Left 
     for (int i = 0; i < lenX; i++) 
     { 
      map[i, 0] = wall; 
      map[i, 1] = wall; 
     } 
     //Fill Right 
     for (int i = 0; i < lenX; i++) 
     { 
      map[i, lenY - 2] = wall; 
      map[i, lenY - 1] = wall; 
     } 
    } 
+0

что такое настоящие требования? Вам нужно заполнить 'map [n, m]' символом 'wal'l? –

+0

Да, это просто сетка с четырьмя стенами, и я хочу просто заполнить эту стену «переменным». – EpaXapate

+3

Вы писали код, который понимаете. Все это понимают. Это очень хороший код. Никогда не просите код, который вы не понимаете, это не имеет никакого смысла. –

ответ

0

, так как первые и последние петли запустить тот же интервал можно свернуть их в один:

public void FillWalls() 
{ 
    //Fill Top 
    for (int i = 0; i < lenY; i++) 
    { 
     map[0, i] = wall; 
     map[1, i] = wall; 

     //Fill Bottom    
     map[lenX - 2, i] = wall; 
     map[lenX - 1, i] = wall; 
    } 
    //Fill Left 
    for (int i = 0; i < lenX; i++) 
    { 
     map[i, 0] = wall; 
     map[i, 1] = wall; 

     //Fill Right 

     map[i, lenY - 2] = wall; 
     map[i, lenY - 1] = wall; 
    } 
} 

Интересно, где lexX и lenY приходят из

+0

круто, я получаю нижний план, прежде чем заканчивать писать ответ. Не было этого еще –

+0

членов класса, очевидно ... точно так же, как 'map' – Xiaoy312

+0

Это именно то, что мне нужно! Большое спасибо! – EpaXapate

0

Так вы рисуете коробка?

Вы можете сделать сверху + снизу и влево + вправо вместе (сокращение до двух циклов), но, честно говоря, время, которое вы сохраняете, будет совершенно тривиально.

//Fill Top + bottom 
    for (int i = 0; i < lenY; i++) 
    { 
     map[0, i] = wall; 
     map[1, i] = wall; 

     map[lenX - 2, i] = wall; 
     map[lenX - 1, i] = wall; 
    } 

Вы также должны иметь возможность немного уменьшить копирования/вставки, приковав значения вместе, как:

//Fill Top + bottom 
    for (int i = 0; i < lenY; i++) 
    { 
     map[0, i] = map[1, i] = map[lenX - 2, i] = map[lenX - 1, i] = wall; 
    } 

Там нет никакой выгоды производительности, чтобы сделать это, хотя.

+0

Спасибо за ответ, действительно классный метод! – EpaXapate

Смежные вопросы