indices kotlin что это

Списки в Kotlin

Под списками в программировании понимают составной тип данных, элементы которого упорядочены как в случае массивов. Однако списки могут содержать элементы разных типов, количество элементов в них можно менять, то есть удалять и добавлять.

Списки являются разновидностью коллекций – особой группы типов данных, или классов. Коллекции разных типов имеют во многом похожие функции-методы. Разные коллекции можно передавать в одни и те же функции. Коллекции связаны между собой наследованием и общими интерфейсами.

С другой стороны, в Kotlin списки (как и другие типы коллекций) делятся на неизменяемые и изменяемые. В неизменяемых нельзя менять количество элементов и изменять значение элементов. Это сделано с целью защиты данных. Если программист не планирует изменение списка при последующей разработке программы или ее выполнении, то, делая список неизменяемым, он его защищает от случайных изменений. Ведь val по отношению к списку не делает его неизменяемым. Как и в случае массивов val-список можно менять, нельзя только присвоить другой список.

В Kotlin неизменяемый список обычно создается вызовом функции listOf(), которой передается список элементов. Также можно использовать конструктор класса List (по аналогии с массивами).

Другое дело – изменяемые списки. Такие списки в Kotlin относятся к типу MutableList. Слово «mutable» переводится как изменяемый.

Выражение b.indices возвращает диапазон от 0 до индекса последнего элемента массива. Так в примере выше это будет диапазон 0..3.

Особенностью изменяемых списков является не только изменение значений элементов. Это можно делать и с массивами. В списки можно добавлять элементы, удалять их оттуда. Для этого используются специальные методы.

В Kotlin с помощью различных вариаций методов add() и addAll() в список добавляется элемент или другой список.

Если в функцию add() передается только один аргумент, то он расценивается как значение и добавляется в конец списка. Если передается два аргумента, то первый считается индексом, а второй – значением, которое надо вставить в указанное место списка.

Для удаления элементов из списка используются методы removeAt(), который удаляет элемент по индексу, и remove(), удаляющий из списка указанное значение, а также ряд других.

Если в списке есть повторы значения, то remove() удаляет только одно из них.

Заполните список числами. Выведите на экран. Примените к списку функцию-метод shuffle(). Снова выведите список на экран. Что делает метод shuffle()?

Заполните список случайными числами, отсортируйте его с помощью метода sort(), удалите из списка минимальное и максимальное значения.

Источник

Коллекции. List (Списки)

Коллекции в Kotlin используют множество различных интерфейсов: Iterable, Collection, Set, List, MutableIterable, MutableCollection и др.

В Kotlin нет собственных коллекций, только Java-коллекции. Но при этом в Kotlin они обладают более широкими возможностями, используя расширения. Например, вы можете узнать последний элемент списка или найти максимальное значение в коллекции чисел.

Для создания различных типов коллекций есть разные функции. После создания узнаем, какой класс соответствует коллекции. Основные приёмы работы с коллекциями показаны у listOf().

У многих функций есть суффиксы To, By, With: associate, associateTo, associateBy, associateByTo, associateWith, associateWithTo.

В некоторых примерах используются объекты класса Cat.

Функции для создания списков. В списках допустимы дубликаты.

listOf()

Неизменяемые списки List создаются через функцию listOf():

Если у вас есть изменяемый список, то его можно сконвертировать в список для чтения через toList():

Доступ к отдельному элементу списка можно получить по номеру индекса через квадратные скобки.

Также можно использовать метод get() с указанием номера индекса.

Размер списка можно узнать через свойство size. Зная размер, можно без опаски пройтись по всем элементам списка.

Пройтись по всем элементам списка можно через for..in.

Умножаем каждый элемент списка на себя при помощи функции map. Функция проходит по каждому элементу, объединяя результаты в новую коллекцию.

Выводим только имена, игнорируя возраст и другие поля класса.

Можно объединить вызовы функций в цепочки. Выводим имена котов, чей возраст больше 5.

Функция flatMap() работает с коллекцией, содержащей коллекции, и возвращает объединённую «плоскую» коллекцию, содержащую все элементы исходных коллекций.

С помощью any и предиката можно узнать, выполняется ли условие хотя бы для одного элемента.

Выражение !any можно заменить на all.

С помощью all и предиката можно узнать, выполняется ли условие для всех элементов.

Выражение !all можно заменить на any.

С помощью none и предиката можно узнать, что ни один из всех элементов не выполняет условие.

count с предикатом позволяет узнать число элементов в списке, которые соответствуют условию.

Не используйте для этой цели цепочку filter.size, так как вы создаёте промежуточную коллекцию, а это накладные расходы. Функция count считает только количество элементов, а не сами элементы.

fold задаёт начальное значение, а потом собирает все значения в списке от первого к последнему.

reduce работает аналогично, только без указания начального значения.

foldRight работает аналогично fold, только значения берутся от последнего к первому.

reduceRight похож на foldRight без указания начального значения.

forEach позволяет пройтись по всем элементам списка.

forEachIndexed работает аналогично, вдобавок мы можем получить индекс позиции и его значение.

max() позволит получить максимальное значение из списка или null при отсутствии элементов. Работает с базовыми типами. Позже в Kotlin 1.4 метод был переименован в maxOrNull().

Функция min() вычисляет минимальное значение из списка или null при отсутствии элементов. Работает с базовыми типами. Позже в Kotlin 1.4 метод был переименован в minOrNull().

Читайте также:  приложение социальный мониторинг в каких городах работает

maxBy() возвращает первый элемент с наибольшим значением заданной функции или null, если элементов нет. Работает со всеми типами. Аналогичная функция minBy() возвращает первый элемент с наименьшим значением.

Выберем самого старшего кота.

Функция maxWith() позволяет использовать Comparator. Выберем кота с самым длинным именем.

Кота с самым коротким именем можно вычислить через похожую функцию minWith().

В Kotlin 1.4 появилась новая функция, вычисляющая наибольшее или наименьшее число.

Она удобна при работе с классами для выборки одного поля. Вычислим самого молодого котика.

sumBy() подсчитывает сумму всех элементов, после того, как они подверглись изменению.

При работе с числами Double используйте функцию sumByDouble().

В Kotlin 1.4 появилась новая функция sumOf(), позволяющая суммировать элементы разных типов. Сложим возраст (Int) и вес (Double) всех котов.

Также появились minOfWith() и maxOfWith(), работающие с компаратором.

drop() отсекает указанное число элементов. Также есть функции dropWhile, dropLastWhile.

take оставит первые элементы списка. takeLast оставит последние элементы.

takeWhile оставит первые элементы, которые соответствуют условию.

Соответственно, takeLastWhile() оставит последние элементы, соответствующие условию.

Обратите внимание на разницу между takeWhile() и filter() (см. ниже). Первая функция будет отбирать элементы, пока выполняется условие и прервётся, а вторая пройдётся по всему списку до конца.

takeIf() будет выбирать элементы, если выполняется условие (предикат).

filter вернёт список, который соответствует предикату. Функция может удалять элементы из коллекции, но не может изменять их (используйте map).

filterNot вернёт список, который не соответствует предикату.

filterNotNull вернёт новый список, не содержащий null.

Расширенная версия filterNotNullTo() уберёт все элементы null и добавит оставшиеся элементы в новый список.

contains() позволит убедиться, что нужный элемент присутствует в списке.

Если нужно проверить сразу несколько элементов, то используйте containsAll(), передавая ему список желаемых элементов.

Получить элемент по индексу можно через elementAt(). Также доступны elementAtOrElse, elementAtOrNull.

first() вернёт первый элемент, соответствующий предикату. Если элемент не будет найдет, то получим исключение NoSuchElementException. Похожая функция firstOrNull вернёт null, если элемент не будет найден.

По такому же принципу работают last() и lastOrNull() для последнего элемента.

find похож на first.

indexOf() вернёт индекс элемента. Функции indexOfFirst(), indexOfLast, lastIndexOf() работают с предикатами.

Функция single() вернёт один уникальный элемент из списка. Если элементов, соответствующих условию, будет несколько будет исключение. singleOrNull вместо исключения вернёт null.

Развернуть элементы списка можно через reverse() и reversed().

Сортировка: sort, sorted, sortedDescending, sortBy, sortByDescending, sortWith

Сортировка оригинального списка происходит через sort().

Отсортировать список можно через sorted(). Возвращается новый список, а оригинальный список остаётся без изменений.

В обратном порядке от большого к меньшему можно через sortedDescending(). Возвращается новый список, а оригинальный список остаётся без изменений.

Сортировка по условию. Отсортируем по именам котов при помощи sortBy().

Аналогично в обратном порядке через sortByDescending().

Если элементы содержат null, то можно сортировать при помощи sortWith() в связке с nullFirst().

Обратная задача решается при помощи nullLast.

Можно сортировать, сравнивая несколько полей класса. Порядок важен. Будем сортировать по имени и по возрасту (имена и возраст могут совпадать в списке).

Сортируем по длине имён в порядке возрастания, используя Comparator.

Если в порядке убывания, то поменяем местами аргументы.

Можно сложить два списка. К элементам первого списка будут добавлены элементы второго списка.

Добавить ещё один элемент можно через plus(). Оригинальный список останется без изменений и будет создан новый список.

Функция minus() отнимает указанный элемент.

Функция average() подсчитывает среднее значение всех элементов списка.

Функция slice возвращает список по указанным индексам.

Функция shuffled() создаёт новый список с перемешанными элементами от старого списка.

Функция shuffle() (Kotlin 1.2) перемешивает элементы изменяемого списка в случайном порядке.

Разбить список на отдельные элементы с определённым условием можно через функцию partition. При значении true элементы попадают в одну группу, а остальные в другую. Возвращается объект Pair, содержащий два списка.

Разделим котов на молодых и пожилых.

groupBy группирует значения по некоторому критерию. Например, мы хотим разбить список котов по возрасту.

На выходе получается словарь с ключами (Map >), которые определяют признак группировки (в нашем случае это возраст). Мы получили одну группу котов с возрастом 5 лет и вторую группу с возрастом 9 лет. Вы можете изменить словарь при помощи mapKeys и mapValues.

Список может содержать дубликаты. Но если вы хотите избавиться от них, то можно преобразовать список во множество, а затем снова в список. Существует готовая функция distinct(), которая сделает это за вас.

Можно даже создать сразу несколько условий для поиска дубликатов. Например, поищем дубликаты и по имени и по возрасту. Пусть у нас будет целая орава котов с одинаковыми именами. Некоторые из них могут быть одного возраста. Вес тоже может совпадать, но пока он нас не интересует.

emptyList()

Пустой неизменяемый список можно создать через emptyList(), который вернёт тип List.

listOfNotNull()

arrayListOf()

Изменяемый список создаётся через arrayListOf(), который возвращает ArrayList.

Сделаем обход коллекции с использованием индекса.

mutableListOf()

Изменять данные можно только в изменяемых списках. Но если у вас есть в наличии неизменяемый список, то его можно сконвертировать в изменяемый через специальный метод toMutableList(). При этом будет создан новый список.

При изменении списков индексы пересчитываются.

Читайте также:  что делать если гематома растет

Удалить элемент из изменяемого списка можно через removeIf(), указав лямбда-выражение в качестве условия.

Удалить все элементы, которые подчиняются условию, можно также через removeAll():

Если надо не удалить, а оставить элементы по определённому условию, то используйте функцию retainAll().

Операции с двумя списками

С помощью addAll() можно добавить в список элементы другого списка.

Вычитать элементы одного списка при помощи элементов другого списка можно через minusAssign().

Функция-комбинатор zip() принимает разные коллекции и объединяют их в одну новую. Для примера объединим два списка: с именами котов и их размерами. Функция zip() возвращает новый список (коллекцию пар Pair). Для этой коллекции пар вызовем функцию toMap(), чтобы получить ассоциативный массив, к элементам которого можно обращаться по ключу. В этом случае ключ — имя кота.

Попробуем вычитать элементы из списка.

Допустим и такой вариант.

replaceAll (Kotlin 1.2)

Заменяет каждый элемент списка новым значением в результате заданного выражения. Доступно для API 24 и выше

fill (Kotlin 1.2)

Заменяет все элементы списка заданным значением.

Все коллекция являются стандартными и полностью совместимыми с Java, Kotlin не использует собственных коллекций, но тем не менее предлагает удобные методы из коробки. Выше были показаны примеры для списков. Можно применять методы для других коллекций.

Например, найдём последний элемент из коллекции.

joinToString()

Встроенная котлиновская функция для создания строки из элементов коллекции. Вы можете задать собственный префикс и постфикс, а также разделитель. При большом количестве элементов можно задать лимит, тогда будут показаны первые элементы коллекции и после них многоточие.

Функция использует параметры по умолчанию, поэтому часть параметров можно опускать.

Создать список из случайных чисел

В Kotlin можно создать функцию для генерации списка из случайных чисел очень лаконичным способом.

ArrayDeque (Kotlin 1.3.70)

Упражнения для коллекций

Имеется список, некоторые элементы которого повторяются несколько раз. Найти самый повторяемый элемент.

Источник

Kotlin list is an ordered collection of items. A Kotlin list can be either mutable (mutableListOf) or read-only (listOf). The elements of list can be accessed using indices. Kotlin mutable or immutable lists can have duplicate elements.

Creating Kotlin Lists

For list creation, use the standard library functions listOf() for read-only lists and mutableListOf() for mutable lists.

To prevent unwanted modifications, obtain read-only views of mutable lists by casting them to List.

Example

When you run the above Kotlin program, it will generate the following output:

Loop through Kotlin Lists

There are various ways to loop through a Kotlin list. Lets study them one by one:

Using toString() function

When you run the above Kotlin program, it will generate the following output:

Using Iterator

When you run the above Kotlin program, it will generate the following output:

Using for loop

When you run the above Kotlin program, it will generate the following output:

Using forEach

When you run the above Kotlin program, it will generate the following output:

Size of Kotlin List

We can use size property to get the total number of elements in a list:

When you run the above Kotlin program, it will generate the following output:

The «in» Operator

The in operator can be used to check the existence of an element in a list.

Example

When you run the above Kotlin program, it will generate the following output:

The contain() Method

The contain() method can also be used to check the existence of an element in a list.

Example

When you run the above Kotlin program, it will generate the following output:

The isEmpty() Method

The isEmpty() method returns true if the collection is empty (contains no elements), false otherwise.

Example

When you run the above Kotlin program, it will generate the following output:

The indexOf() Method

Example

When you run the above Kotlin program, it will generate the following output:

The get() Method

The get() method can be used to get the element at the specified index in the list. First element index will be zero.

Example

When you run the above Kotlin program, it will generate the following output:

List Addition

We can use + operator to add two or more lists into a single list. This will add second list into first list, even duplicate elements will also be added.

Example

When you run the above Kotlin program, it will generate the following output:

List Subtraction

We can use operator to subtract a list from another list. This operation will remove the common elements from the first list and will return the result.

Example

When you run the above Kotlin program, it will generate the following output:

Slicing a List

We can obtain a sublist from a given list using slice() method which makes use of range of the elements indices.

Example

When you run the above Kotlin program, it will generate the following output:

Removing null a List

We can use filterNotNull() method to remove null elements from a Kotlin list.

When you run the above Kotlin program, it will generate the following output:

Filtering Elements

We can use filter() method to filter out the elements matching with the given predicate.

Читайте также:  какой золотой краской покрасить пики на заборе чтобы не выгорало

When you run the above Kotlin program, it will generate the following output:

Dropping First N Elements

We can use drop() method to drop first N elements from the list.

When you run the above Kotlin program, it will generate the following output:

Grouping List Elements

We can use groupBy() method to group the elements matching with the given predicate.

When you run the above Kotlin program, it will generate the following output:

Mapping List Elements

We can use map() method to map all elements using the provided function:.

When you run the above Kotlin program, it will generate the following output:

Chunking List Elements

We can use chunked() method to create chunks of the given size from a list. Last chunk may not have the elements equal to the number of chunk size based on the total number of elements in the list.

When you run the above Kotlin program, it will generate the following output:

Windowing List Elements

We can use windowed() method to a list of element ranges by moving a sliding window of a given size over a collection of elements.

When you run the above Kotlin program, it will generate the following output:

By default, the sliding window moves one step further each time but we can change that by passing a custom step value:

When you run the above Kotlin program, it will generate the following output:

Kotlin mutable List

We can create mutable list using mutableListOf(), later we can use add() to add more elements in the same list, and we can use remove() method to remove the elements from the list.

When you run the above Kotlin program, it will generate the following output:

Quiz Time (Interview & Exams Preparation)

Answer : A

Explanation

Yes we can make a mutable list to immutable by casting them to List

Answer : A

Explanation

Yes we can add or subtract two Kotlin lists and generate a third list.

Answer : A

Explanation

get() method is used to get the list element from the given index.

Источник

Коллекции. Общий обзор

Стандартная библиотека Kotlin предоставляет большой набор инструментов для работы с коллекциями — группами с переменным количеством элементов (или нулём элементов), которые используются для решения какой-либо задачи.

Коллекции — это общая концепция для большинства языков программирования, поэтому, если вы знакомы с коллекциями, например, в Java или Python, то можете пропустить данное введение и перейти к разделам с более подробным описанием.

Обычно в коллекции находится несколько объектов одного типа (но также коллекция может быть пустой). Эти объекты называются элементами или items. Например, все студенты одного факультета образуют коллекцию, которую можно использовать для расчёта их среднего возраста.

Типы коллекций в Kotlin:

Типы коллекций

Ниже представлена ​​схема интерфейсов коллекций Kotlin:

Пройдемся по интерфейсам и их реализациям.

Collection

Элементы списка (в том числе null ) могут дублироваться: список может содержать любое количество одинаковых объектов. Два списка считаются равными, если они имеют одинаковый размер и их элементы в одних и тех позициях структурно равны.

Как видите, в некоторых аспектах списки очень похожи на массивы. Однако есть одно важное отличие: размер массива определяется при инициализации и никогда не изменяется; в свою очередь список не имеет предопределённого размера; размер списка может быть изменён в результате операций записи: добавления, обновления или удаления элементов.

Map не является наследником интерфейса Collection ; однако это один из типов коллекций в Kotlin. Map хранит пары «ключ-значение» (или entries); ключи уникальны, но разные ключи могут иметь одинаковые значения. Интерфейс Map предоставляет такие функции, как доступ к значению по ключу, поиск ключей и значений и т. д.

Источник

Основной синтаксис

Это подборка базового синтаксиса с примерами. В конце каждого раздела вы найдете ссылку на более подробное описание соответствующей темы.

Вы также можете изучить все основы Kotlin в бесплатном курсе Основы Kotlin от JetBrains Academy.

Определение имени пакета и импорт

Имя пакета указывается в начале исходного файла, так же как и в Java.

Но в отличие от Java, нет необходимости, чтобы структура пакетов совпадала со структурой папок: исходные файлы могут располагаться в произвольном месте на диске.

Точка входа в программу

Вывод в стандартный поток

print выводит свой аргумент в стандартный поток вывода.

println выводит свой аргумент и добавляет перевод строки, так что следующее, что вы выведите, появится на следующей строке.

Функции

В качестве тела функции может выступать выражение. Тогда тип возвращаемого значения определяется автоматически.

Функция, не возвращающая никакого значения ( void в Java).

Тип возвращаемого значения Unit может быть опущен.

Переменные

Вы можете объявлять глобальные переменные.

Создание классов и экземпляров

Свойства класса могут быть перечислены при его объявлении или в его теле.

Конструктор по умолчанию с параметрами, перечисленными при объявлении класса, доступен автоматически.

Комментарии

Также, как любой другой популярный современный язык, Kotlin поддерживает однострочные и многострочные (блочные) комментарии.

Блочные комментарии в Kotlin могут быть вложенными.

См. Документация Kotlin кода для информации о документации в комментариях.

Строковые шаблоны

Условные выражения

Источник

Сказочный портал