5. Массивы, списки и циклы
В этом задании вы познакомитесь с массивами и списками, а также узнаете о различных способах создания циклов в языке программирования Kotlin.
Шаг 1: Составьте списки
Списки — это фундаментальный тип данных в Kotlin, и они похожи на списки в других языках.
- Объявите список
listOfи распечатайте его. Этот список нельзя изменить.
val school = listOf("mackerel", "trout", "halibut")
println(school)
⇒ [mackerel, trout, halibut]
- Объявите список, который можно изменять с помощью метода
mutableListOf`.`. Удалите элемент.
val myList = mutableListOf("tuna", "salmon", "shark")
myList.remove("shark")
⇒ res36: kotlin.Boolean = true
Метод remove()возвращает управление, trueкогда успешно удаляет переданный элемент.
Шаг 2: Создайте массивы
Как и в других языках, в Kotlin есть массивы . В отличие от списков в Kotlin, которые имеют изменяемые и неизменяемые версии, в Kotlin нет изменяемой версии массива Array. После создания массива его размер фиксируется. Вы не можете добавлять или удалять элементы, за исключением копирования в новый массив.
Правила использования valи varдля массивов такие же, как и для списков.
- Объявите массив строк, используя `
arrayOf.`. Используйтеjava.util.Arrays.toString()утилиту `array` для его вывода.
val school = arrayOf("shark", "salmon", "minnow")
println(java.util.Arrays.toString(school))
⇒ [shark, salmon, minnow]
- Массив, объявленный с помощью `std::string`,
arrayOfне имеет связанного с элементами типа, поэтому вы можете смешивать типы, что полезно. Объявите массив с разными типами.
val mix = arrayOf("fish", 2)
- Вы также можете объявлять массивы с одним типом для всех элементов. Объявите массив целых чисел, используя `
intArrayOf().`. Существуют соответствующие конструкторы или функции создания экземпляров для массивов других типов.
val numbers = intArrayOf(1,2,3)
- Объедините два массива с помощью
+оператора.
val numbers = intArrayOf(1,2,3)
val numbers3 = intArrayOf(4,5,6)
val foo2 = numbers3 + numbers
println(foo2[5])
=> 3
- Попробуйте различные комбинации вложенных массивов и списков. Как и в других языках, вы можете вкладывать массивы и списки друг в друга. То есть, когда вы помещаете массив внутрь массива, вы получаете массив массивов, а не сглаженный массив содержимого обоих массивов. Элементы массива также могут быть списками, а элементы списков могут быть массивами.
val numbers = intArrayOf(1, 2, 3)
val oceans = listOf("Atlantic", "Pacific")
val oddList = listOf(numbers, oceans, "salmon")
println(oddList)
⇒ [[I@89178b4, [Atlantic, Pacific], salmon]
Первый элемент, numbers`<array>`, представляет собой массив Array. Если вы не используете утилиту `array` для его вывода, Kotlin выводит адрес вместо содержимого массива.
- Одна из замечательных особенностей Kotlin заключается в том, что вы можете инициализировать массивы с помощью кода, а не задавать им значения 0. Попробуйте этот пример:
val array = Array (5) { it * 2 }
println(java.util.Arrays.toString(array))
⇒ [0, 2, 4, 6, 8]
Код инициализации находится в фигурных скобках {}. В коде itобозначает индекс массива, начиная с 0.
Шаг 3: Создайте циклы
Теперь, когда у вас есть списки и массивы, перебор элементов работает так, как вы и ожидали.
- Создайте массив. Используйте
forцикл для перебора элементов массива и вывода их на экран.
val school = arrayOf("shark", "salmon", "minnow")
for (element in school) {
print(element + " ")
}
⇒ shark salmon minnow
- В Kotlin можно одновременно перебирать элементы и их индексы. Попробуйте этот пример:
for ((index, element) in school.withIndex()) {
println("Item at $index is $element\n")
}
⇒ Item at 0 is shark Item at 1 is salmon Item at 2 is minnow
- Попробуйте разные размеры шага и диапазоны. Вы можете указывать диапазоны чисел или символов в алфавитном порядке. И, как и в других языках, вам не обязательно делать шаг вперед на 1. Вы можете сделать шаг назад, используя
downTo.
for (i in 1..5) print(i)
⇒ 12345
for (i in 5 downTo 1) print(i)
⇒ 54321
for (i in 3..6 step 2) print(i)
⇒ 35
for (i in 'd'..'g') print (i)
⇒ defg
- Попробуйте использовать циклы. Как и в других языках, в Kotlin есть
whileциклы,do...whileциклы и++операторы--. В Kotlin также естьrepeatциклы.
var bubbles = 0
while (bubbles < 50) {
bubbles++
}
println("$bubbles bubbles in the water\n")
do {
bubbles--
} while (bubbles > 50)
println("$bubbles bubbles in the water\n")
repeat(2) {
println("A fish is swimming")
}
⇒ 50 bubbles in the water 49 bubbles in the water A fish is swimmingA fish is swimming