Список
Специализированные функции, которые работают только со списками.
В целом, предпочтительнее использовать API Enum, а не List.
Доступ к элементам списка по индексу выполняется линейно. Также поддерживаются отрицательные индексы, но они подразумевают, что список будет проитерирован дважды: один раз для расчета правильного индекса и другой для выполнения операции.
Было принято решение делегировать большинство функций стандартной библиотеке Erlang, но следовать соглашениям Elixir, принимая объект (в данном случае, список) в качестве первого аргумента.
Список символов
Если список состоит из целых неотрицательных чисел, он также может называться списком символов. Elixir использует одинарные кавычки для определения списков символов:
iex> 'héllo' [104, 233, 108, 108, 111]
В частности, списки символов могут быть напечатаны в одинарных кавычках, если они содержат только символы ASCII:
iex> 'abc' 'abc'
Это поведение оправдано для лучшей поддержки библиотек Erlang, которые могут возвращать текст в виде списков символов вместо строк Elixir. Примером такой функции является Application.loaded_applications:
Application.loaded_applications
#=> [{:stdlib, 'ERTS CXC 138 10', '2.6'},
{:compiler, 'ERTS CXC 138 10', '6.0.1'},
{:elixir, 'elixir', '1.0.0'},
{:kernel, 'ERTS CXC 138 10', '4.1'},
{:logger, 'logger', '1.0.0'}] Резюме
Функции
- delete(список, элемент)
-
Удаляет заданный элемент из списка. Возвращает список без этого элемента. Если элемент встречается более одного раза в списке, удаляется только первое вхождение.
- delete_at(список, индекс)
-
Создает новый список, удаляя значение по указанному
index. Отрицательные индексы указывают на смещение с конца списка. Еслиindexвыходит за пределы, возвращается исходныйlist. - duplicate(элемент, n)
-
Дублирует указанный элемент
nраз в списке. - first(список)
-
Возвращает первый элемент в
listилиnil, еслиlistпуст. - flatten(список)
-
Разворачивает заданный
listвложенных списков. - flatten(список, хвост)
-
Разворачивает заданный
listвложенных списков. Списокtailбудет добавлен в конец развернутого списка. - foldl(список, acc, функция)
-
Складывает (редуцирует) заданный список слева с помощью функции. Требуется аккумулятивный элемент.
- foldr(список, acc, функция)
-
Складывает (редуцирует) заданный список справа с помощью функции. Требуется аккумулятивный элемент.
- insert_at(список, индекс, значение)
-
Возвращает список с
valueвставленным по указанномуindex. Обратите внимание, чтоindexограничено длиной списка. Отрицательные индексы указывают на смещение с конца списка. - keydelete(список, ключ, позиция)
-
Принимает список кортежей и удаляет первый кортеж, где элемент в
positionсоответствует заданномуkey. Возвращает новый список. - keyfind(список, ключ, позиция, по умолчанию \\ nil)
-
Принимает список кортежей и возвращает первый кортеж, где элемент в
positionв кортеже соответствует заданномуkey. - keymember?(список, ключ, позиция)
-
Принимает список кортежей и возвращает
true, если существует кортеж, где элемент вpositionв кортеже соответствует заданномуkey. - keyreplace(список, ключ, позиция, новый_кортеж)
-
Принимает список кортежей и заменяет элемент, идентифицированный
keyвposition, если он существует. - keysort(список, позиция)
-
Принимает список кортежей и сортирует элементы в
positionкортежей. Сортировка стабильная. - keystore(список, ключ, позиция, новый_кортеж)
-
Принимает список кортежей и заменяет элемент, идентифицированный
keyвposition. Если элемент не существует, он добавляется в конец списка. - keytake(список, ключ, позиция)
-
Принимает
listкортежей и возвращает первый кортеж, где элемент вpositionв кортеже соответствует заданномуkey, а такжеlistбез найденного кортежа. - last(список)
-
Возвращает последний элемент в
listилиnil, еслиlistпуст. - replace_at(список, индекс, значение)
-
Возвращает список с замененным значением по указанному
index. Отрицательные индексы указывают на смещение с конца списка. Еслиindexвыходит за пределы, возвращается исходныйlist. - to_atom(список_символов)
-
Преобразует список символов в атом.
- to_existing_atom(список_символов)
-
Преобразует список символов в существующий атом. Вызывает
ArgumentError, если атом не существует. - to_float(список_символов)
-
Возвращает число с плавающей точкой, текстовое представление которого является
charlist. - to_integer(список_символов)
-
Возвращает целое число, текстовое представление которого есть
charlist. - to_integer(список_символов, основание)
-
Возвращает целое число, текстовое представление которого есть
charlistв основанииbase. - to_string(список)
-
Преобразует список целых чисел, представляющих кодовые точки, списки или строки в строку.
- to_tuple(список)
-
Преобразует список в кортеж.
- update_at(список, индекс, функция)
-
Возвращает список с обновленным значением по указанному
index. Отрицательные индексы указывают на смещение с конца списка. Еслиindexвыходит за пределы, возвращается исходныйlist. - wrap(список)
-
Оборачивает аргумент в список. Если аргумент уже является списком, возвращает список. Если аргумент
nil, возвращает пустой список. - zip(список_списков)
-
Сшивает соответствующие элементы из каждого списка в
list_of_lists.
Функции
delete(список, элемент)
delete(list, any) :: list
Удаляет заданный элемент из списка. Возвращает список без этого элемента. Если элемент встречается более одного раза в списке, удаляется только первое вхождение.
Примеры
iex> List.delete([1, 2, 3], 1) [2, 3] iex> List.delete([1, 2, 2, 3], 2) [1, 2, 3]
delete_at(список, индекс)
delete_at(list, integer) :: list
Создает новый список, удаляя значение по указанному index. Отрицательные индексы указывают на смещение с конца списка. Если index выходит за пределы, возвращается исходный list.
Примеры
iex> List.delete_at([1, 2, 3], 0) [2, 3] iex> List.delete_at([1, 2, 3], 10) [1, 2, 3] iex> List.delete_at([1, 2, 3], -1) [1, 2]
duplicate(элемент, n)
duplicate(elem, non_neg_integer) :: [elem] when elem: var
Дублирует указанный элемент n раз в списке.
Примеры
iex> List.duplicate("hello", 3)
["hello", "hello", "hello"]
iex> List.duplicate([1, 2], 2)
[[1, 2], [1, 2]] first(список)
first([elem]) :: nil | elem when elem: var
Возвращает первый элемент в list или nil, если list пуст.
Примеры
iex> List.first([]) nil iex> List.first([1]) 1 iex> List.first([1, 2, 3]) 1
flatten(список)
flatten(deep_list) :: list when deep_list: [any | deep_list]
Разворачивает заданный list вложенных списков.
Примеры
iex> List.flatten([1, [[2], 3]]) [1, 2, 3]
flatten(список, хвост)
flatten(deep_list, [elem]) :: [elem] when deep_list: [elem | deep_list], elem: var
Разворачивает заданный list вложенных списков. Список tail будет добавлен в конец развернутого списка.
Примеры
iex> List.flatten([1, [[2], 3]], [4, 5]) [1, 2, 3, 4, 5]
foldl(список, acc, функция)
foldl([elem], acc, (elem, acc -> acc)) :: acc when elem: var, acc: var
Складывает (редуцирует) заданный список слева с помощью функции. Требуется аккумулятивный элемент.
Примеры
iex> List.foldl([5, 5], 10, fn(x, acc) -> x + acc end) 20 iex> List.foldl([1, 2, 3, 4], 0, fn(x, acc) -> x - acc end) 2
foldr(список, acc, функция)
foldr([elem], acc, (elem, acc -> acc)) :: acc when elem: var, acc: var
Складывает (редуцирует) заданный список справа с помощью функции. Требуется аккумулятивный элемент.
Примеры
iex> List.foldr([1, 2, 3, 4], 0, fn(x, acc) -> x - acc end) -2
insert_at(список, индекс, значение)
insert_at(list, integer, any) :: list
Возвращает список с value вставленным по указанному index. Обратите внимание, что index ограничено длиной списка. Отрицательные индексы указывают на смещение с конца списка.
Примеры
iex> List.insert_at([1, 2, 3, 4], 2, 0) [1, 2, 0, 3, 4] iex> List.insert_at([1, 2, 3], 10, 0) [1, 2, 3, 0] iex> List.insert_at([1, 2, 3], -1, 0) [1, 2, 3, 0] iex> List.insert_at([1, 2, 3], -10, 0) [0, 1, 2, 3]
keydelete(list, key, position)
keydelete([tuple], any, non_neg_integer) :: [tuple]
Получает список кортежей и удаляет первый кортеж, где элемент в позиции position соответствует заданному key. Возвращает новый список.
Примеры
iex> List.keydelete([a: 1, b: 2], :a, 0) [b: 2] iex> List.keydelete([a: 1, b: 2], 2, 1) [a: 1] iex> List.keydelete([a: 1, b: 2], :c, 0) [a: 1, b: 2]
keyfind(list, key, position, default \\ nil)
keyfind([tuple], any, non_neg_integer, any) :: any
Получает список кортежей и возвращает первый кортеж, где элемент в позиции position в кортеже соответствует заданному key.
Примеры
iex> List.keyfind([a: 1, b: 2], :a, 0)
{:a, 1}
iex> List.keyfind([a: 1, b: 2], 2, 1)
{:b, 2}
iex> List.keyfind([a: 1, b: 2], :c, 0)
nil keymember?(list, key, position)
keymember?([tuple], any, non_neg_integer) :: any
Получает список кортежей и возвращает true, если существует кортеж, где элемент в позиции position в кортеже соответствует заданному key.
Примеры
iex> List.keymember?([a: 1, b: 2], :a, 0) true iex> List.keymember?([a: 1, b: 2], 2, 1) true iex> List.keymember?([a: 1, b: 2], :c, 0) false
keyreplace(list, key, position, new_tuple)
keyreplace([tuple], any, non_neg_integer, tuple) :: [tuple]
Получает список кортежей и заменяет элемент, идентифицированный key в позиции position, если он существует.
Примеры
iex> List.keyreplace([a: 1, b: 2], :a, 0, {:a, 3})
[a: 3, b: 2] keysort(list, position)
keysort([tuple], non_neg_integer) :: [tuple]
Получает список кортежей и сортирует элементы в позиции position кортежей. Сортировка стабильна.
Примеры
iex> List.keysort([a: 5, b: 1, c: 3], 1) [b: 1, c: 3, a: 5] iex> List.keysort([a: 5, c: 1, b: 3], 0) [a: 5, b: 3, c: 1]
keystore(list, key, position, new_tuple)
keystore([tuple], any, non_neg_integer, tuple) :: [tuple, ...]
Получает список кортежей и заменяет элемент, идентифицированный key в позиции position. Если элемент не существует, он добавляется в конец списка.
Примеры
iex> List.keystore([a: 1, b: 2], :a, 0, {:a, 3})
[a: 3, b: 2]
iex> List.keystore([a: 1, b: 2], :c, 0, {:c, 3})
[a: 1, b: 2, c: 3] keytake(list, key, position)
keytake([tuple], any, non_neg_integer) ::
{tuple, [tuple]} |
nil Получает список кортежей и возвращает первый кортеж, где элемент в позиции position в кортеже соответствует заданному key, а также list без найденного кортежа.
Если такой кортеж не найден, возвращается nil.
Примеры
iex> List.keytake([a: 1, b: 2], :a, 0)
{{:a, 1}, [b: 2]}
iex> List.keytake([a: 1, b: 2], 2, 1)
{{:b, 2}, [a: 1]}
iex> List.keytake([a: 1, b: 2], :c, 0)
nil last(list)
last([elem]) :: nil | elem when elem: var
Возвращает последний элемент в list или nil, если list пуст.
Примеры
iex> List.last([]) nil iex> List.last([1]) 1 iex> List.last([1, 2, 3]) 3
replace_at(list, index, value)
replace_at(list, integer, any) :: list
Возвращает список с изменённым значением в указанной index. Отрицательные индексы указывают смещение от конца списка. Если index выходит за пределы, возвращается исходный list.
Примеры
iex> List.replace_at([1, 2, 3], 0, 0) [0, 2, 3] iex> List.replace_at([1, 2, 3], 10, 0) [1, 2, 3] iex> List.replace_at([1, 2, 3], -1, 0) [1, 2, 0] iex> List.replace_at([1, 2, 3], -10, 0) [1, 2, 3]
to_atom(charlist)
to_atom(charlist) :: atom
Преобразует список символов в атом.
В настоящее время Elixir не поддерживает преобразования из списков символов, содержащих символы Юникода больше 0xFF.
Встраивается компилятором.
Примеры
iex> List.to_atom('elixir')
:elixir to_existing_atom(charlist)
to_existing_atom(charlist) :: atom
Преобразует список символов в существующий атом. Вызывает ArgumentError, если атом не существует.
В настоящее время Elixir не поддерживает преобразования из списков символов, содержащих символы Юникода больше 0xFF.
Встраивается компилятором.
Примеры
iex> _ = :my_atom
iex> List.to_existing_atom('my_atom')
:my_atom
iex> List.to_existing_atom('this_atom_will_never_exist')
** (ArgumentError) argument error to_float(charlist)
to_float(charlist) :: float
Возвращает число с плавающей запятой, текстовое представление которого charlist.
Встраивается компилятором.
Примеры
iex> List.to_float('2.2017764e+0')
2.2017764 to_integer(charlist)
to_integer(charlist) :: integer
Возвращает целое число, текстовое представление которого charlist.
Встраивается компилятором.
Примеры
iex> List.to_integer('123')
123 to_integer(charlist, base)
to_integer(charlist, 2..36) :: integer
Возвращает целое число, текстовое представление которого charlist в системе счисления base.
Встраивается компилятором.
Примеры
iex> List.to_integer('3FF', 16)
1023 to_string(list)
to_string(:unicode.charlist) :: String.t
Преобразует список целых чисел, представляющих кодовые точки, списки или строки в строку.
Обратите внимание, что эта функция ожидает список целых чисел, представляющих кодовые точки UTF-8. Если у вас есть список байтов, вместо этого необходимо использовать :binary модуль.
Примеры
iex> List.to_string([0x00E6, 0x00DF]) "æß" iex> List.to_string([0x0061, "bc"]) "abc"
to_tuple(list)
to_tuple(list) :: tuple
Преобразует список в кортеж.
Встраивается компилятором.
Примеры
iex> List.to_tuple([:share, [:elixir, 163]])
{:share, [:elixir, 163]} update_at(list, index, fun)
update_at([elem], integer, (elem -> any)) :: list when elem: var
Возвращает список с обновлённым значением в указанной index. Отрицательные индексы указывают смещение от конца списка. Если index выходит за пределы, возвращается исходный list.
Примеры
iex> List.update_at([1, 2, 3], 0, &(&1 + 10)) [11, 2, 3] iex> List.update_at([1, 2, 3], 10, &(&1 + 10)) [1, 2, 3] iex> List.update_at([1, 2, 3], -1, &(&1 + 10)) [1, 2, 13] iex> List.update_at([1, 2, 3], -10, &(&1 + 10)) [1, 2, 3]
wrap(list)
wrap(list | any) :: list
Оборачивает аргумент в список. Если аргумент уже является списком, возвращает список. Если аргумент nil, возвращает пустой список.
Примеры
iex> List.wrap("hello")
["hello"]
iex> List.wrap([1, 2, 3])
[1, 2, 3]
iex> List.wrap(nil)
[] zip(list_of_lists)
zip([list]) :: [tuple]
Комбинирует соответствующие элементы из каждого списка в list_of_lists.
Комбинация завершается, как только любой из списков завершается.
Примеры
iex> List.zip([[1, 2], [3, 4], [5, 6]])
[{1, 3, 5}, {2, 4, 6}]
iex> List.zip([[1, 2], [3], [5, 6]])
[{1, 3, 5}]
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.3.4/List.html