при использовании NSUInteger в убывающем цикле for, как определить> = 0 - PullRequest
1 голос
/ 31 декабря 2011

Если я хочу использовать цикл вроде

for (NSUInteger row = 10; row >= 0; row--) {
  // do something
}

, как мне обойти тот факт, что строка всегда будет> 0, поскольку это целое число без знака.Средняя конструкция цикла for становится просто:

for (NSUInteger row = 10; row; row--) {

}

Ответы [ 6 ]

6 голосов
/ 31 декабря 2011

Если вы используете NSInteger вместо NSUInteger, это становится немного проще.Поскольку NSInteger является целочисленным типом со знаком, вызов оператора декремента (--) для переменной со значением ноль изменяет значение на -1, поэтому вы можете проверить это с помощью простого сравнения:

for (NSInteger row = 10; row >= 0; row--) {
    // do stuff with row
}

Если по какой-то причине вам нужно использовать NSUInteger, то вызов оператора декремента для переменной со значением ноль приведет к тому, что значение переменной будет обернуто до максимально возможного значения для NSUInteger.Вы можете проверить это, используя NSUIntegerMax.

for (NSUInteger row = 10; row != NSUIntegerMax; row--) {
    // do stuff with row
}
0 голосов
/ 16 декабря 2016

Другой трюк - переместить декремент в часть проверки состояния.Кстати этот цикл на одну операцию меньше классического.

for (NSUInteger i = 10; i-- > 0;)
{
}
0 голосов
/ 31 декабря 2011

Если вам действительно нужно использовать NSUInteger

for (NSUInteger row = 10; row >= 0; row--) {
     // do something
    if(row == 0) {break;}
}

В противном случае попробуйте использовать NSInteger, как предложил Саймон Уитакер

0 голосов
/ 31 декабря 2011
for (NSUInteger index = 11; index > 0; index--) {
  NSUInteger row = index-1;
}
0 голосов
/ 31 декабря 2011

Вы должны либо сделать это:

for (NSUInteger row = 10; row >= 1; row--) {
}

или это:

for (NSInteger row = 10; row >= 0; row--) {
}
0 голосов
/ 31 декабря 2011

Вам нужен неподписанный? Если это так, вам придётся придумать тест, который будет делать то, что вы хотите. Возможно row> = 0 && row <= 10, хотя на мой вкус это немного неуклюже. </p>

Изменить: Просто хотел добавить, что сравнение без знака> = 0 является излишним, но если вы собираетесь придерживаться без знака, я бы оставил это, потому что это по крайней мере передает намерение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...