2015-11-02 3 views

ответ

12

Вы можете объединить списки (не массивы) с функцией ++/2.

Однако часто в функциональном программировании вы будете создать список, используя минусы (|) оператор, как так:

a = []    # [] 
b = ["foo" | a]  # ["foo"]   ["foo" | []] 
c = ["bar" | b]  # ["bar", "foo"] ["bar" | ["foo" | []]] 

Это эквивалентно:

a = []    # [] 
b = ["foo" | a]  # ["foo" | []] 
c = ["bar" | b]  # ["bar" | ["foo" | []]] 

Вы можете также видели этот оператор в образце соответствия:

["bar" | tail] = ["bar", "foo"] #tail is now ["foo"] 

Вы будете часто видеть списки bu ilt с помощью этой методики, а затем в конце вызова функции обращается в обратном направлении, чтобы получить результаты в том же порядке, что и при использовании конкатенации списков (например, Enum.filter/2). Этот ответ объясняет это хорошо Erlang: Can this be done without lists:reverse?

Вы можете прочитать больше о типе данных списка на http://elixir-lang.org/getting-started/basic-types.html#lists-or-tuples

+0

Хороший вопрос, чтобы убедиться, что человек, который задал вопрос, понимает, что он (неопределенное местоимение) имеет дело со списками, а не с массивами. –

+1

На момент написания вопроса я этого не понимал, но, очевидно, теперь я это делаю. Будучи тем, что это фундаментальная часть Эликсира, другие должны задать тот же вопрос, что и я. Этот ответ касается решения, и что на самом деле это не массивы. – steakunderscore

16

Для конкатенации, есть ++ оператор.

Так для примера

iex> [1, 2] ++ [3, 4] 
[1, 2, 3, 4] 
+4

Кроме того, вы также можете удалить части списков с '--',' [1, 2, 3, 4, 5 ] - [3, 4, 5] 'дает' [1, 2] '. –