Что такое таблицы в программировании? Как они реализуются?

Таблица в программировании — это структура для хранения данных в виде строк и столбцов или в виде пар ключ — значение. Конкретный смысл зависит от контекста: массивная таблица, таблица записей, хеш-таблица, таблица базы данных.

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

Таблица как двумерный массив

Простейшая таблица может быть представлена двумерным массивом.

Например, матрица оценок:

        Математика  Информатика
Иван        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 с.