Кортеж
Функции для работы с кортежами.
Обратите внимание, что следующие функции для кортежей находятся в Kernel:
-
elem/2- доступ к кортежу по индексу -
put_elem/3- вставка значения в кортеж по индексу -
tuple_size/1- получение количества элементов в кортеже
Кортежи предназначены в качестве контейнеров фиксированного размера для нескольких элементов. Для обработки коллекции элементов используйте список. Функции Enum не работают с кортежами.
Кортежи обозначаются фигурными скобками:
iex> {}
{}
iex> {1, :two, "three"}
{1, :two, "three"}
Кортеж может содержать элементы разных типов, которые хранятся непрерывно в памяти. Доступ к любому элементу занимает постоянное время, но изменение кортежа, что приводит к созданию поверхностной копии, занимает линейное время. Кортежи хорошо подходят для чтения данных, а списки лучше подходят для обходов.
Кортежи обычно используются, когда функция имеет несколько значений возврата или для обработки ошибок. File.read/1 возвращает {:ok, contents} при успешном чтении заданного файла, или же {:error, reason} , например, когда файла не существует.
Функции в этом модуле, которые добавляют и удаляют элементы из кортежей, редко используются на практике, поскольку они обычно подразумевают использование кортежей как коллекций. Для добавления в кортеж предпочтительнее извлечь элементы из старого кортежа с помощью сопоставления с образцом, а затем создать новый кортеж:
tuple = {:ok, :example}
# Avoid
result = Tuple.insert_at(tuple, 2, %{})
# Prefer
{:ok, atom} = tuple
result = {:ok, atom, %{}} Краткое описание
Функции
- append(кортеж, значение)
Вставляет элемент в конец кортежа.
- delete_at(кортеж, индекс)
Удаляет элемент из кортежа.
- duplicate(данные, размер)
Создаёт новый кортеж.
- insert_at(кортеж, индекс, значение)
Вставляет элемент в кортеж.
- product(кортеж)
Вычисляет произведение элементов кортежа.
- sum(кортеж)
Вычисляет сумму элементов кортежа.
- to_list(кортеж)
Преобразует кортеж в список.
Функции
append(кортеж, значение)Источник
@spec append(tuple(), term()) :: tuple()
Вставляет элемент в конец кортежа.
Возвращает новый кортеж с добавленным элементом в конце, содержащий элементы tuple , за которым следует value в качестве последнего элемента.
Встроено компилятором.
Примеры
iex> tuple = {:foo, :bar}
iex> Tuple.append(tuple, :baz)
{:foo, :bar, :baz} delete_at(кортеж, индекс)Источник
@spec delete_at(tuple(), non_neg_integer()) :: tuple()
Удаляет элемент из кортежа.
Удаляет элемент по заданному index из tuple. Возникает исключение ArgumentError, если index отрицательное или больше или равно длине tuple. Индекс нулевой.
Встроено компилятором.
Примеры
iex> tuple = {:foo, :bar, :baz}
iex> Tuple.delete_at(tuple, 0)
{:bar, :baz} duplicate(данные, размер)Источник
@spec duplicate(term(), non_neg_integer()) :: tuple()
Создаёт новый кортеж.
Создаёт кортеж size содержащий заданные data на каждой позиции.
Встроено компилятором.
Примеры
iex> Tuple.duplicate(:hello, 3)
{:hello, :hello, :hello} insert_at(кортеж, индекс, значение)Источник
@spec insert_at(tuple(), non_neg_integer(), term()) :: tuple()
Вставляет элемент в кортеж.
Вставляет value в tuple по заданному index. Возникает исключение ArgumentError, если index отрицательное или больше длины tuple. Индекс нулевой.
Встроено компилятором.
Примеры
iex> tuple = {:bar, :baz}
iex> Tuple.insert_at(tuple, 0, :foo)
{:foo, :bar, :baz}
iex> Tuple.insert_at(tuple, 2, :bong)
{:bar, :baz, :bong} product(кортеж)Источник
@spec product(tuple()) :: number()
Вычисляет произведение элементов кортежа.
Примеры
iex> Tuple.product({255, 255})
65025
iex> Tuple.product({255, 1.0})
255.0
iex> Tuple.product({})
1 sum(кортеж)Источник
@spec sum(tuple()) :: number()
Вычисляет сумму элементов кортежа.
Примеры
iex> Tuple.sum({255, 255})
510
iex> Tuple.sum({255, 0.0})
255.0
iex> Tuple.sum({})
0 to_list(кортеж)Источник
@spec to_list(tuple()) :: list()
Преобразует кортеж в список.
Возвращает новый список со всеми элементами кортежа.
Встроено компилятором.
Примеры
iex> tuple = {:foo, :bar, :baz}
iex> Tuple.to_list(tuple)
[:foo, :bar, :baz]
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.13.4/Tuple.html