2014-02-04 3 views
2

Использование цикла for, как я могу перебирать список, имея возможность не перебирать последний элемент в списке.Scala итерации по списку, кроме последнего элемента

В моем случае, я хотел бы, чтобы не перебрать первый элемент, и нужно перебирать в обратном направлении, вот что у меня есть:

 for(thing <- things.reverse) { 
      //do some computation iterating over every element; 
      //break out of loop when first element is reached 
     } 

ответ

8

Вы можете оставить первый элемент, прежде чем отменить его:

for(thing <- things.drop(1).reverse) { 
} 

Для списков, drop(1) такая же, как tail, если список не пуст:

for(thing <- things.tail.reverse) { 
} 

или вы могли бы сделать обратный первый и использовать dropRight:

for(thing <- things.reverse.dropRight(1)) { 
} 

Вы также можете использовать init, если список не пуст:

for(thing <- things.reverse.init) { 
} 
+3

Вы может использовать 'init' и' tail' вместо 'dropRight' и' drop' –

+0

@ RégisJean-Gilles - Спасибо, я обновил ответ. Они требуют, чтобы список был непустым, хотя они не совсем то же самое. – Lee

+0

Очень хорошая точка, предупреждение полностью оправдано. –

3

Как отметил Regis, for(thing <- things.tail.reverse) {}

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