Menu
Coddy logo textTech

Обзор List, Set, Map

Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 63 из 110.

Dart предоставляет три основных типа коллекций, которые вы будете постоянно использовать при создании приложений. Каждый из них служит разным целям для организации и доступа к данным.

Список (List) — это упорядоченная коллекция, в которой доступ к элементам осуществляется по индексу. Элементы сохраняют порядок вставки, и допускаются дубликаты:

var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]);      // apple
print(fruits.length);  // 3

Множество (Set) — это неупорядоченная коллекция уникальных элементов. Если вы попытаетесь добавить дубликат, он будет просто проигнорирован:

var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers);  // {1, 2, 3}

Map хранит пары ключ-значение, позволяя искать значения по связанному с ними ключу:

var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']);  // 30

Вот краткое сравнение:

КоллекцияУпорядоченностьДубликатыДоступ по
ListДаРазрешеныИндексу
SetНетНе разрешеныПроверке наличия
MapНет*Уникальным ключамКлючу

Эти коллекции становятся еще более мощными в сочетании с обобщениями (generics), которые вы изучите в следующих уроках, чтобы создавать типобезопасные коллекции, работающие с вашими пользовательскими классами.

challenge icon

Задание

Легко

Давайте создадим систему управления классом, которая использует все три типа коллекций для организации данных об учениках различными способами. Вы увидите, как списки (Lists), множества (Sets) и словари (Maps) служат разным целям при управлении одной и той же информацией.

Вы организуете свой код в два файла:

  • classroom.dart: Создайте класс Classroom, который управляет данными учеников, используя все три типа коллекций:
    • List<String> с именем attendanceOrder для отслеживания учеников в порядке их прибытия (дубликаты разрешены, если ученик отметился несколько раз)
    • Set<String> с именем uniqueStudents для отслеживания того, какие именно ученики присутствуют (без дубликатов)
    • Map<String, int> с именем scores для хранения тестовых баллов каждого ученика
    Ваш класс Classroom должен иметь следующие методы:
    • recordArrival(String name) — добавляет имя как в список посещаемости, так и в множество уникальных учеников
    • setScore(String name, int score) — сохраняет балл ученика в словаре (map)
    • printReport() — выводит отчет о классе (формат показан ниже)
  • main.dart: Импортируйте файл classroom и продемонстрируйте работу системы:
    • Создайте экземпляр Classroom
    • Запишите прибытие в следующем порядке: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
    • Установите баллы: Alice = 95, Bob = 87, Carol = 92
    • Вызовите printReport()

Метод printReport() должен выводить:

Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}

Обратите внимание, как List сохраняет каждое прибытие (включая дубликаты), Set автоматически оставляет только уникальные имена, а Map связывает каждого ученика с его баллом. Каждый тип коллекции идеально выполняет свою задачу!

Ожидаемый вывод:

Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}

Шпаргалка

Dart предоставляет три основных типа коллекций для организации данных:

List — это упорядоченная коллекция, в которой доступ к элементам осуществляется по индексу. Дубликаты разрешены:

var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]);      // apple
print(fruits.length);  // 3

Set — это неупорядоченная коллекция уникальных элементов. Дубликаты автоматически игнорируются:

var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers);  // {1, 2, 3}

Map — хранит пары «ключ-значение» для поиска по ключу:

var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']);  // 30
КоллекцияУпорядоченнаяДубликатыДоступ по
ListДаРазрешеныИндексу
SetНетНе разрешеныПроверке наличия
MapНет*Уникальные ключиКлючу

Попробуйте сами

import 'classroom.dart';

void main() {
  // TODO: Создайте экземпляр Classroom
  
  // TODO: Запишите прибытие в следующем порядке: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
  
  // TODO: Установите баллы: Alice = 95, Bob = 87, Carol = 92
  
  // TODO: Вызовите printReport() для отображения данных класса
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование