Структуры данных (списки, множ, словари) Flashcards

1
Q

Как записываются списки в Дарт?

A

Нужно указывать тип данных.

List<int> numbers = [1, 2, 3, 4, 5];</int>

List<String> fruits = ['apple', 'banana'];</String>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Как добавить новый элемент в Список?

Как удалить элемент из Списка?

Как вставить элемент в Список в определенном месте?

A

названиеСписка.add(новый элемент)

void main() {
List<String> fruits = ['apple', 'banana'];
fruits.add('orange'); // Добавляем новый элемент
print(fruits); // Выводит: [apple, banana, orange]
}</String>

remove(): Удалить элемент из списка.

insert(index, element): Вставить элемент по указанному индексу.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Доступ к элементам

A

По индексу.

void main() {
List<String> fruits = ['apple', 'banana', 'orange'];
print(fruits[0]); // Выводит: apple
}</String>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Как изменять элементы в Списке?

A

Ты можешь изменять элементы в списке, обращаясь к ним по индексу:

void main() {
List<String> fruits = ['apple', 'banana', 'orange'];
fruits[1] = 'kiwi'; // Изменяем второй элемент
print(fruits); // Выводит: [apple, kiwi, orange]
}</String>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Расскажи о всех способах перебора / итерации по Списку.

A
  1. Цикл FOR.

Он полезен для явного контроля над индексами:

void main() {
List<String> fruits = ['apple', 'banana', 'orange'];</String>

for (int i = 0; i < fruits.length; i++) {
print(fruits[i]);
}
}

  1. Цикл for-in

упрощает синтаксис и особенно удобен для перебора коллекций:

void main() {
List<String> fruits = ['apple', 'banana', 'orange'];</String>

for (var fruit in fruits) {
print(fruit);
}
}

forEach() - проходит по каждому элементу списка и выполняет действие для каждого элемента:

fruits.forEach((fruit) {
print(fruit);
});

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

void main() {
List<String> fruits = ['apple', 'banana', 'orange'];</String>

fruits.map((fruit) => print(fruit)).toList();
}

Метод map() применяет функцию к каждому элементу и возвращает новый список. В этом случае он выводит каждый элемент.

Выбор подходящего способа зависит от задачи и структуры кода.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

В чём разница между for-in, и forEach()?

A
  1. Синтаксис и простота использования

for-in:
Синтаксически проще и напоминает стандартные циклы.
—————————

  1. Возможность прерывания цикла:for-in:
    Ты можешь легко прервать выполнение цикла с помощью break или пропустить итерацию с помощью continue.

for (var fruit in fruits) {
if (fruit == ‘banana’) break; // Прерывание цикла
print(fruit);
}

В forEach() нет встроенной возможности для использования break или continue.

  1. Итерация по коллекциям с null:for-in:
    При использовании for-in Dart выдаст ошибку, если коллекция null, поскольку он не может итерировать по null.forEach():
    forEach() нельзя вызывать на null. Если ты попытаешься это сделать, произойдет ошибка времени выполнения.

Чтобы избежать ошибки при использовании forEach() с потенциально пустыми коллекциями, нужно проверять наличие элементов:

fruits?.forEach((fruit) {
print(fruit);
});

  1. Использование анонимных функций:

for-in:

Не поддерживает использование анонимных функций или лямбда-выражений непосредственно внутри цикла.

forEach():

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

Итог:

Используй for-in, если тебе нужно простое решение для перебора коллекций и возможность использовать break или continue.
Используй forEach(), если тебе нужен функциональный стиль программирования или ты работаешь с анонимными функциями и не планируешь прерывать цикл.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое лямбда-выражения?

A

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

Пример:

Обычная функция:
int add(int a, int b) {
return a + b;
}

Лямбда-выражение:
var add = (int a, int b) => a + b;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Расскажи про Множества и чем они отличаются от Списка?

Напиши пример Множества (синтаксис)

A

Множества — это коллекции уникальных значений.
В них не может быть повторяющихся элементов.

void main() {
Set<String> fruits = {'apple', 'banana', 'orange'};
fruits.add('kiwi'); // Добавление элемента
fruits.add('apple'); // Не добавит, так как 'apple' уже есть</String>

print(fruits); // Вывод: {banana, kiwi, orange, apple}
}

  1. Порядок элементов:

List: Сохраняет порядок добавления элементов. Вы можете получить доступ к элементам по индексу (например, list[0]).

Set: Не гарантирует порядок элементов. Элементы могут храниться в произвольном порядке.

  1. Доступ к элементам:List: Позволяет обращаться к элементам по индексу. Например, myList[2] вернет третий элемент списка.Set: Не поддерживает доступ по индексу. Для работы с элементами необходимо использовать итерацию или методы, такие как contains().
  1. Производительность:List: Поиск элемента в List требует линейного времени, поскольку необходимо пройти по всему списку.Set: Операции поиска (например, contains()) в Set выполняются быстрее, поскольку они реализованы как хэш-таблицы, что позволяет выполнять такие операции за среднее время O(1).
  1. Использование:List: Подходит для хранения упорядоченных коллекций, где важен порядок и может быть несколько одинаковых значений.Set: Идеален для хранения уникальных значений, когда порядок не важен, и вам нужно быстро проверять наличие элемента.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что такое Словарь и чем отличается от Множеств и Списков?

A

Словари представляют собой коллекции пар “ключ-значение”. Ключи должны быть уникальными, а значения могут повторяться.

void main() {
Map<String, int> ages = {
‘Alice’: 30,
‘Bob’: 25,
‘Charlie’: 35,
};

print(ages[‘Alice’]); // Вывод: 30
ages[‘Bob’] = 26; // Обновление значения
print(ages); // Вывод: {Alice: 30, Bob: 26, Charlie: 35}
}

Когда использовать:

Множества: Если вам нужно хранить уникальные значения и вам не важно их расположение.

Словари: Если вам нужно хранить данные в виде пар "ключ-значение", где вы хотите быстро получать доступ к значению по ключу.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Назови способы итерации по Спискам, Множеству и Словарю.

A

Список - for, for-in, forEach, while, map(), fold().

Множества - contains(), map(),
for-in, forEach
Однако, так как порядок в Set не гарантирован, эти способы могут вести себя несколько иначе.

Словарь - forEach, for-in, map(), entries, keys и values

forEach (перебор пар ключ-значение):

Map<String, int> ages = {‘Alice’: 30, ‘Bob’: 25};
ages.forEach((key, value) {
print(‘$key: $value’);
});

for-in (перебор ключей):

for (var key in ages.keys) {
print(‘$key: ${ages[key]}’);
}

map(): (для преобразования пар)

var ageDoubles = ages.map((key, value) => MapEntry(key, value * 2));

entries (перебор всех пар):

for (var entry in ages.entries) {
print(‘${entry.key}: ${entry.value}’);
}

keys и values:

keys:
for (var key in ages.keys) {
print(key);
}

values:
for (var value in ages.values) {
print(value);
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Как создать список с фиксированной длиной и как его изменить?

A

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

List<int> numbers = List.filled(3, 0); // длина 3, заполнен значениями 0, т.е. [0, 0, 0]</int>

Метод List.filled() заполняет все элементы одинаковым значением. Если ты хочешь создать список с фиксированной длиной и с разными значениями, ты можешь использовать List.generate()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Как добавить новую пару “ключ-значение” в словарь?

A

Чтобы добавить новую пару “ключ-значение”, можно использовать простой синтаксис с квадратными скобками:

Map<String, int> ages = {
‘alice’: 20,
‘bob’: 30,
};

ages[‘charlie’] = 25; // Добавляем ‘charlie’ с возрастом 25

будет:

{‘alice’: 20, ‘bob’: 30, ‘charlie’: 25}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Что произойдёт, если в словарь добавить пару с уже существующим ключом?

A

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

ages[‘alice’] = 22; // Обновляем возраст ‘alice’

{‘alice’: 22, ‘bob’: 30, ‘charlie’: 25}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что делает конструктор?

A

Конструктор получает значения аргументов и присваивает их соответствующим свойствам объекта:

Например,

this.name присваивает 'Кейт' свойству name.
this.age присваивает 20 свойству age.

Таким образом, конструктор выполняет следующие функции:

Он позволяет инициализировать свойства объекта при его создании.
Он принимает аргументы, которые используются для установки значений свойств.
Он обеспечивает готовность объекта к использованию сразу после его создания.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q
A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly