목록은 배열이 아닙니다

아래 코드를 처음 보았을 때 아마도 Array일 것이라고 생각했습니다. 그렇다면 당신도 같은 생각을 하고 있을지도 모릅니다. ㅋㅋㅋ

# Creating a list
list = [1, :atom, 3, 4, "string"]


그러나 Elixir에서 위의 코드는 List입니다.

목록이란 무엇입니까?



간단히 말해서 List는 Linked List입니다. 그러나 더 잘 이해하기 위해 배열이 무엇인지 기억하고 목록에 대해 이야기해 봅시다.

어레이 정보



배열은 동일한 유형의 데이터 모음입니다.

배열에서 인덱스를 통해 콘텐츠에 액세스할 수 있습니다. 예를 들어 Ruby에서 Array의 세 번째 요소를 직접 가져와야 하는 경우 인덱스 번호 2를 전달하여 수행할 수 있습니다.

> x = [1, 2, 3, 4]
[1, 2, 3, 4]

> x[2]
3


배열의 또 다른 기능은 요소 사이를 하나씩 직접 반복할 수 있다는 것입니다. Ruby에서는 다음과 같이 할 수 있습니다.

> x.each{|element| puts element}
1
2
3
4


이제 List와 Elixir에 대해 다시 이야기하겠습니다.



Elixir에서 목록은 연결된 목록입니다. 이는 각 항목이 메모리의 위치를 ​​통해 다음 요소에 바인딩됨을 의미합니다.



목록의 항목을 어떻게 반복할 수 있습니까?



먼저 목록이 두 부분으로 구성되어 있음을 알아야 합니다. 머리는 목록의 첫 번째 항목이고 꼬리는 나머지 항목입니다.

Elixir에는 List의 첫 번째 항목(head)에 액세스하는 커널 기능hd(list)이 있고 List(tail)의 나머지 항목에 액세스하는 커널 기능tl(list)도 있습니다. 아래 예를 살펴보십시오.

> # creating the List
> list = [1, :atom, 3, 4, "string"]
[1, :atom, 3, 4, "string"]

> # Return the first item of the List - Head
> hd(list)
1

> # Return the rest of items of the List - Tail
> tl(list)
[:atom, 3, 4, "string"]


또한 패턴 일치를 사용하여 목록의 headtail에 액세스할 수 있습니다.

# Creating a list
> list = [1, :atom, 3, 4, "string"]
[1, :atom, 3, 4, "string"]

# Using Pattern Matching to assign the first element 
# to the head and the rest of the list to the tail.
> [head | tail] = list
[1, :atom, 3, 4, "string"]

# Return the first element from the list
> head
1

# Return the rest of elements from the list
> tail
[:atom, 3, 4, "string"]


목록의 각 항목을 반복하기 위해 재귀를 사용합니다.

# Creating the module as example
defmodule Example do
  def show_each_one([head | tail]) do
    # The kernel function IO to show the content of head
    IO.puts(head)

    # Calling the function itself
    # (where the recursion happens)
    # by passing the tail as the argument of the function
    show_each_one(tail)
  end

  # Creating the function using the pattern Matching
  # In the case of an empty list, it will return null (nil)
  def show_each_one([]), do: nil
end

# Creating a list
list = [1, :atom, 3, 4, "string"]
[1, :atom, 3, 4, "string"]


# Call the function Example.show_each_one/1
# by passing the list as argument
Example.show_each_one(list)

# It will return the result below:
1
atom
3
4
string
nil


다른 많은 커널 함수를 사용하여 목록을 사용할 수 있습니다.
  • first(list) - 목록의 첫 번째 요소를 반환합니다.
  • last(list) - 목록의 목록 요소를 반환합니다.
  • insert_at(list, index, value) - 목록의 특정 위치에 하나의 요소를 삽입합니다.
  • 기타 다수.

  • 목록에 대한 자세한 내용을 알고 싶으면 Elixir documentation about the List 을 참조하십시오.

    우리가 알아야 할 흥미로운 점은 목록 작업에 사용하는 함수가 구현에서 재귀를 사용한다는 것입니다.

    이 콘텐츠가 도움이 되고 의미가 있기를 바랍니다. 안녕!

    콘택트 렌즈:
    이메일: [email protected]
    링크드인:
    Github: https://github.com/dnovais
    트위터:

    좋은 웹페이지 즐겨찾기