Как получить индекс в цикле for

Периодически Scala сильно удивляет как в хорошем смысле этого слова, так и в плохом. С циклом for вышло именно так. Из плохого мной было обнаруженно то, что получить доступ из вне цикла к счеткику никак не выйдет. Поясню на примере C++ о чем идет речь:

int index;
for(index = 0; index < ....) {...}
std::cout << index; // и тут мы получили количество итераций

Да, обломс… Единственный найденный мной рабочий вариант выглядит следующим образом, что на мой взгляд очень и очень печально:

val strings = List("one", "two", "three", "four")
var index = 0
while (index < strings.length) {
  index += 1
}

Но, зато наткнулся на куда более приятную возможность: получение индекса в процессе обработки коллекции без дополнительных приседаний:

val strings = List("one", "two", "three", "four")

for ((string, index) <- strings.zipWithIndex) {
  println("Index: " + index + ", string: " + string)
}

6 Comments Как получить индекс в цикле for

  1. NN

    В Nemerle можно так

    foreach (s in strings with index) …

    При чем это не создает лишних объектов как в случае zipWithIndex.

    Reply
      1. NN

        Ну почему сразу так пессимистично
        Я никак не могу синтаксис Скалы принять , ну не удобен он

        Reply
        1. Alexander Stavonin

          Свои соображения на тему того, почему Nemerle – труп я как-то писал. Кому в современном мире нужно Windows-only решение? К примеру я его даже пощумать не могу :???:

          Reply
          1. NN

            С Mono все работает
            Кроме того онлайн компиляторы есть http://liveworkspace.org/ (новый)
            http://ideone.com (тут старый)

            Надеемся на комманду из jetBrains, может через пару лет будет Nemerle на все платформы

          2. Alexander Stavonin

            Слишком много приседаний и как следствие бесполезно в коммерческой разработке. Еще вопрос “в чем писать” встанет. Так что я бы закапывал его или переписывал на JVM или LLVM.

Leave a Reply