Что такое таблицы в программировании? Как они реализуются?
Таблица в программировании — это структура для хранения данных в виде строк и столбцов или в виде пар ключ — значение. Конкретный смысл зависит от контекста: массивная таблица, таблица записей, хеш-таблица, таблица базы данных.
Главная идея таблицы — организовать данные так, чтобы их можно было удобно искать, читать, изменять и связывать.
Таблица как двумерный массив
Простейшая таблица может быть представлена двумерным массивом.
Например, матрица оценок:
Математика Информатика
Иван 5 4
Анна 4 5В программе это может быть массив массивов.
const scores = [
[5, 4],
[4, 5],
];
console.log(scores[0][1]);const scores = [
[5, 4],
[4, 5],
];
console.log(scores[0][1]);package main
import "fmt"
func main() {
scores := [
[5, 4],
[4, 5],
]
fmt.Println(scores[0][1])
}public class Example {
public static void main(String[] args) {
int[][] scores = {
{5, 4},
{4, 5},
};
System.out.println(scores[0][1]);
}
}scores = [
[5, 4],
[4, 5],
]
print(scores[0][1])Такой подход удобен, если все элементы одного типа и известны индексы строк и столбцов.
Таблица как массив записей
Если строки имеют именованные поля, таблицу удобно представить массивом объектов или записей.
type Student = {
name;
group;
score;
};
const students= [
{ name: "Иван", group: "А1", score: 5 },
{ name: "Анна", group: "А1", score: 4 },
];type Student = {
name: string;
group: string;
score: number;
};
const students: Student[] = [
{ name: "Иван", group: "А1", score: 5 },
{ name: "Анна", group: "А1", score: 4 },
];package main
func main() {
type Student = {
name
group
score
}
students := [
{ name: "Иван", group: "А1", score: 5 },
{ name: "Анна", group: "А1", score: 4 },
]
}public class Example {
public static void main(String[] args) {
type Student = {
name;
group;
score;
};
var students = [
{ name: "Иван", group: "А1", score: 5 },
{ name: "Анна", group: "А1", score: 4 },
];
}
}students = [
{"name": "Иван", "group": "А1", "score": 5},
{"name": "Анна", "group": "А1", "score": 4},
]Такой вариант ближе к таблицам баз данных.
Таблица как словарь
Если нужен быстрый доступ по ключу, таблицу можно реализовать как словарь или map.
const scoresByName = new Map<string, number>();
scoresByName.set("Иван", 5);
scoresByName.set("Анна", 4);
console.log(scoresByName.get("Иван"));const scoresByName = new Map<string, number>();
scoresByName.set("Иван", 5);
scoresByName.set("Анна", 4);
console.log(scoresByName.get("Иван"));package main
import "fmt"
func main() {
scoresByName := map[string]int{
"Иван": 5,
"Анна": 4,
}
fmt.Println(scoresByName["Иван"])
}public class Example {
public static void main(String[] args) {
var scoresByName = new java.util.HashMap<String, Integer>();
scoresByName.put("Иван", 5);
scoresByName.put("Анна", 4);
System.out.println(scoresByName.get("Иван"));
}
}scores_by_name = {
"Иван": 5,
"Анна": 4,
}
print(scores_by_name["Иван"])Здесь имя выступает ключом, а оценка — значением.
Хеш-таблица
Хеш-таблица использует хеш-функцию, которая преобразует ключ в номер позиции во внутреннем массиве.
Идея:
ключ -> хеш-функция -> индекс -> ячейка массиваВ среднем операции поиска, вставки и удаления выполняются быстро, близко к O(1).
Проблема хеш-таблиц — коллизии, когда разные ключи попадают в одну позицию. Для их обработки используют списки, открыту адресацию и другие методы.
Таблицы баз данных
В реляционных базах таблица состоит из строк и столбцов.
Строка — отдельная запись. Столбец — поле записи.
Пример:
Users(id, email, display_name, created_at)Для поиска используют ключи и индексы.
Основные операции с таблицами
- добавление строки;
- удаление строки;
- изменение значения;
- поиск по ключу;
- фильтрация;
- сортировка;
- группировка;
- объединение с другими таблицами.
Как выбрать реализацию
- для матриц и числовых данных подойдет двумерный массив;
- для набора записей подойдет массив объектов;
- для быстрого поиска по ключу подойдет словарь или хеш-таблица;
- для долговременного хранения и сложных запросов подойдет база данных.
Вывод
таблица — это способ организовать данные по строкам, столбцам или ключам. В программах таблицы реализуют через двумерные массивы, массивы записей, словари, хеш-таблицы и таблицы баз данных.
Источники
- Семакин И.Г. Основы программирования и баз данных. Учебник. - М.: Академия, 2014. - 224 с.
- Симонова Е.В. Структуры данных в C#. Линейные и нелинейные динамические структуры. - Лань, 2018. - 152 с.
- Бертран Мейер. Почувствуй класс. Учимся программировать хорошо с объектами и контрактами. - М.: Национальный Открытый Университет "ИНТУИТ": БИНОМ. Лаборатория знаний, 2011. - 775 с.
- Мэтт Вайсфельд. Объектно-ориентированное мышление. - СПб.: Питер, 2014. - 304 с.
- Ривест Р., Штайн К., Лейзерсон Ч., Кормен Т. Алгоритмы: построение и анализ. - М.: Вильямс, 2007. - 1296 с.
- Стивенс Род. Алгоритмы. Теория и практическое применение. - М.: Эксмо, 2017. - 544 с.
- Рублев В.С. Основы теории алгоритмов. - 2-е издание, исправленное. - М.: Научный мир, 2008. - 128 с.
- Гольдберг Г.Л. Основы алгоритмизации и программирования. - М.: Академия, 2012. - 384 с.
- Лаврищева И.В. Технология программирования. - М.: Горячая линия - Телеком, 2011. - 400 с.
- Сергеев И.С., Сухоруков А.И., Шестаков А.А. Программирование: учебник для вузов. - М.: БИНОМ. Лаборатория знаний, 2013. - 512 с.