Elixir-키워드 목록
지금까지 어떤 연관 데이터 구조, 즉 특정 값 (또는 여러 값)을 키에 연결할 수있는 데이터 구조에 대해서는 논의하지 않았습니다. 다른 언어는 사전, 해시, 연관 배열 등과 같은 다른 이름으로 이러한 기능을 호출합니다.
Elixir에는 키워드 목록과지도라는 두 가지 주요 연관 데이터 구조가 있습니다. 이 장에서는 키워드 목록에 초점을 맞출 것입니다.
많은 함수형 프로그래밍 언어에서 연관 데이터 구조의 표현으로 2- 항목 튜플 목록을 사용하는 것이 일반적입니다. Elixir에서 튜플 목록이 있고 튜플의 첫 번째 항목 (즉, 키)이 원자 일 때이를 키워드 목록이라고합니다. 같은 것을 이해하기 위해 다음 예제를 고려하십시오-
list = [{:a, 1}, {:b, 2}]
Elixir는 이러한 목록을 정의하기위한 특수 구문을 지원합니다. 각 원자 끝에 콜론을 배치하고 튜플을 완전히 제거 할 수 있습니다. 예를 들면
list_1 = [{:a, 1}, {:b, 2}]
list_2 = [a: 1, b: 2]
IO.puts(list_1 == list_2)
위의 프로그램은 다음 결과를 생성합니다-
true
둘 다 키워드 목록을 나타냅니다. 키워드 목록도 목록이기 때문에 목록에서 사용한 모든 작업을 사용할 수 있습니다.
키워드 목록에서 원자와 관련된 값을 검색하려면 목록 이름 뒤에있는 []에 원자를 전달합니다.
list = [a: 1, b: 2]
IO.puts(list[:a])
위의 프로그램은 다음 결과를 생성합니다-
1
키워드 목록에는 세 가지 특징이 있습니다.
- 키는 원자 여야합니다.
- 키는 개발자가 지정한대로 주문됩니다.
- 키는 두 번 이상 제공 될 수 있습니다.
키워드 목록을 조작하기 위해 Elixir는 키워드 모듈을 제공 합니다 . 그러나 키워드 목록은 단순히 목록이므로 목록과 동일한 선형 성능 특성을 제공합니다. 목록이 길수록 키를 찾고 항목 수를 계산하는 데 더 오래 걸립니다. 이러한 이유로 Elixir에서는 키워드 목록이 주로 옵션으로 사용됩니다. 많은 항목을 저장하거나 최대 하나의 값으로 하나의 키 연결을 보장해야하는 경우 대신 맵을 사용해야합니다.
키에 액세스
주어진 키와 관련된 값에 접근하기 위해 우리는 Keyword.get함수. 주어진 키와 관련된 첫 번째 값을 반환합니다. 모든 값을 얻기 위해 Keyword.get_values 함수를 사용합니다. 예를 들면-
kl = [a: 1, a: 2, b: 3]
IO.puts(Keyword.get(kl, :a))
IO.puts(Keyword.get_values(kl))
위의 프로그램은 다음 결과를 생성합니다-
1
[1, 2]
키 삽입
새 값을 추가하려면 Keyword.put_new. 키가 이미 존재하는 경우 값은 변경되지 않습니다.
kl = [a: 1, a: 2, b: 3]
kl_new = Keyword.put_new(kl, :c, 5)
IO.puts(Keyword.get(kl_new, :c))
위의 프로그램이 실행되면 추가 키 c가있는 새로운 키워드 목록을 생성하고 다음과 같은 결과를 생성합니다.
5
키 삭제
키에 대한 모든 항목을 삭제하려면 Keyword.delete; 키의 첫 번째 항목 만 삭제하려면 Keyword.delete_first.
kl = [a: 1, a: 2, b: 3, c: 0]
kl = Keyword.delete_first(kl, :b)
kl = Keyword.delete(kl, :a)
IO.puts(Keyword.get(kl, :a))
IO.puts(Keyword.get(kl, :b))
IO.puts(Keyword.get(kl, :c))
이것은 첫 번째를 삭제합니다 b 목록 및 모든 a목록에서. 위의 프로그램이 실행되면 다음과 같은 결과가 생성됩니다.
0