Цикл for. Способы реализации. Применение цикла for к диапазонам, массивам, спискам, словарям, множествам
Содержание
- 1. Цикл for. Способы реализации. Общая форма
- 2. Примеры решения задач с использованием цикла for
- Связанные темы
Поиск на других ресурсах:
1. Цикл for. Способы реализации. Общая форма
В языке Kotlin цикл for подобен циклу foreach языков программирования Java, C#. Он позволяет производить обход значений элементов некоторой коллекции, массива, диапазона или другого набора значений.
Обход значений объекта, который содержит набор элементов, может производиться в прямом и обратном направлениях. Также при обходе значений можно указывать шаг.
Если обход элементов некоторого набора осуществляется в прямом направлении, то общая форма цикла следующая
for (varIter in IterObj step stepValue) { // Statements // ... }
здесь
- IterObj – объект, содержащий или определяющий набор значений, которые нужно последовательно обойти от первого до последнего. Таким объектом может быть список, массив, диапазон и т.п.;
- varIter – переменная-итератор, поочередно принимающая значения из набора IterObj. В теле цикла for выполняются инструкции Statements для каждого нового значения varIter;
- Statements – одна или несколько инструкций, выполняемых на каждой итерации;
- stepValue – шаг обхода значений диапазона. Значение stepValue должно быть целым положительным числом.
Если шаг обхода равен 1, фрагмент step=stepValue можно опустить
for (varIter in IterObj) { // Statements // ... }
Если необходимо получить перебор значений в заданных пределах в обратном порядке, то для этого используется форма оператора for с ключевым словом downTo
for (varIter in BeginValue downTo EndValue step stepValue) { // Statements // ... }
здесь
- varIter – переменная-счетчик итераций;
- BeginValue, EndValue – первые и последние значения, рассматриваемые в обратном порядке;
- stepValue – шаг изменения счетчика varIter. Значение stepValue должно быть целым положительным числом.
Если stepValue равно 1, то этот фрагмент можно опустить. В этом случае цикл for будет выглядеть следующим образом
for (varIter in BeginValue downTo EndValue) { // Statements // ... }
⇑
2. Примеры решения задач с использованием цикла for
2.1. Обход диапазона
Простейшая задача – обход диапазона чисел в прямом и обратном порядке.
fun main(args:Array<String>) { // Обход диапазона // 1. Заданный диапазон целых чисел val ir : IntRange = 0..10 // 2. Вывести квадраты чисел из диапазона for (t in ir) print((t*t).toString()+" ") // 3. Вывести квадраты парных чисел диапазона println() for (t in ir step 2) print((t*t).toString()+" ") // 4. Вывести квадраты парных чисел диапазона в обратном порядке println() for (t in ir.last downTo ir.first step 2) print((t*t).toString()+" ") }
Результат выполнения программы
0 1 4 9 16 25 36 49 64 81 100 0 4 16 36 64 100 100 64 36 16 4 0
⇑
2.2. Обход списка List
В нижеприведенном примере показана обработка списка строк и списка чисел.
fun main(args:Array<String>) { // Обход списка // 1. Заданный список строк val ls : List<String> = listOf("abc", "abcd", "jklmn", "joprst", "pupkin", "ddeee") // 2. Вывести список for (s in ls) print(s + " ") // 3. В заданном списке вычислить позицию первой строки с наибольшей длиной. var maxLen : Int var posMaxLen : Int var i : Int i = 0 posMaxLen = 0 maxLen = ls[posMaxLen].length for (s in ls) { if (maxLen < s.length) { posMaxLen = i maxLen = s.length } i++ } println() print("posMaxLen = " + posMaxLen + ", " + "maxLen = " + maxLen) // 4. Вывести список строк в обратном порядке println() for (s in ls.reversed()) print(s + " ") // 5. В заданном списке целых чисел вычислить сумму элементов, которые // размещаются на нечетных позициях 1, 3, 5, …. // Считать, что нумерация позиций начинается с 0. // 5.1. Заданный список val lstInt : List<Int> = listOf(2, 4, 3, 8, 2, 1, 5, 7, 9, 3) var pos : Int var summ : Int // 5.2. Цикл обхода списка pos = 0 summ = 0 for (i in lstInt) { if (pos % 2 == 1) summ += i pos++ } // 5.3. Вывести результат println() println("lstInt = " + lstInt) println("summ = " + summ) }
Результат выполнения программы
abc abcd jklmn joprst pupkin ddeee posMaxLen = 3, maxLen = 6 ddeee pupkin joprst jklmn abcd abc lstInt = [2, 4, 3, 8, 2, 1, 5, 7, 9, 3] summ = 23
⇑
2.3. Обход элементов словаря Map
Демонстрируется обход частей словаря в прямом и обратном порядке. Пример демонстрирует возможности цикла for, а не возможности работы со словарями.
fun main(args:Array<String>) { // Обход элементов словаря // 1. Задан словарь, в котором определены пары: номер дня недели -> название дня недели // 1.1. Объявить переменную типа словарь <Int, String> var days : Map<Int, String> = mapOf() // 1.2. Прибавить к словарю значение days = days + mapOf(Pair(1, "Monday")) days = days + mapOf(Pair(2, "Tuesday")) days += mapOf(Pair(3, "Wednesday")) days += mapOf(Pair(4, "Thursday")) days += mapOf(Pair(5, "Friday")) days += mapOf(Pair(6, "Saturday")) days += mapOf(Pair(7, "Sunday")) // 2. Обход словаря и вывод значений for (d in days) print(d.toString() + " ") println() // 3. Вывод значений словаря в обратном порядке for (d in days.keys.reversed()) print(d.toString() + "=" + days[d] + " ") println() }
Результат выполнения программы
1=Monday 2=Tuesday 3=Wednesday 4=Thursday 5=Friday 6=Saturday 7=Sunday 7=Sunday 6=Saturday 5=Friday 4=Thursday 3=Wednesday 2=Tuesday 1=Monday
⇑
2.4. Обход множества Set
Данный пример демонстрирует использование цикла for для обхода множества. Все возможности множеств здесь не раскрываются.
fun main(args:Array<String>) { // Обход элементов множества // 1. Заданное множество val Colors = setOf("Red", "Blue", "Green", "Yellow") // 2. Вывести элементы множества for (c in Colors) print(c + " ") println() // 3. Вывести элементы множества в обратном порядке for (c in Colors.reversed()) print(c + " ") println() }
Результат выполнения программы
Red Blue Green Yellow Yellow Green Blue Red
⇑
2.5. Обход массива Array. Вычисление суммы элементов в массиве согласно условию
В примере демонстрируется использование цикла for для решения следующих задач:
- обход элементов массива и их вывод в прямом порядке;
- обход элементов массива и их вывод в обратном порядке;
- вычисление суммы элементов массива;
- вычисление суммы парных элементов целочисленного массива;
- вычисление суммы элементов массива, лежащих на четных позициях.
fun main(args:Array<String>) { // Обход массива чисел. // 1. Заданный массив чисел var A : Array<Int> = arrayOf(10, 20, 33, 17, 35, 11, 22) var i:Int var n:Int // 2. Обход массива в прямом порядке for (i in A) { print(i.toString() + " ") } println() // 3. Обход массива в обратном порядке for (i in A.reversedArray()) { print(i.toString() + " ") } println() // 4. Вычислить сумму элементов массива var summ = 0 for (i in A) { summ += i } println("summ = " + summ) // 5. Вычислить сумму парных элементов массива summ = 0 for (i in A) if (i%2 == 0) summ += i println("summPair = " + summ) // 6. Вычислить сумму элементов, которые размещены на парных позициях (0, 2, 4, ...) var pos = 0 summ = 0 for (i in A) { if (pos%2==0) summ += i pos++ } println("summPairPos = " + summ) }
Результат выполнения программы
10 20 33 17 35 11 22 22 11 35 17 33 20 10 summ = 148 summPair = 52 summPairPos = 100
⇑
Связанные темы
- Циклы. Основные понятия. Циклы while, do-while. Примеры решения задач
- Интервалы (диапазоны). Оператор .. . Интервальные типы IntRange, CharRange, LongRange
⇑