Spec-Zone.ru › Elixir 1.3

Список

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

В целом, предпочтительнее использовать 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API