Step By Step (Lua 데이터 구조)
13044 단어 데이터 구조
1 a = {}
2 for i = 1, 1000 do
3 a[i] = 0
4 end
5 print("The length of array 'a' is " .. #a)
6 --The length of array 'a' is 1000
Lua 에 서 는 모든 수 를 배열 의 시작 색인 으로 할 수 있 지만, 일반적으로 1 을 시작 색인 값 으로 사용 합 니 다.또한 많은 Lua 의 내장 기능 과 함 수 는 이러한 특징 에 의존 하기 때문에 충분 한 이유 가 없 는 전제 에서 이 규칙 을 최대한 보장 합 니 다.다음 방법 은 table 의 구조 기 를 통 해 배열 을 만 들 고 초기 화 하 는 것 입 니 다. 예 를 들 어: squares = {1, 4, 9, 16, 25} 2. 2 차원 배열: Lua 에서 우 리 는 두 가지 방식 으로 table 구조의 다 차원 배열 을 이용 할 수 있다.그 중에서 첫 번 째 방식 은 '배열 의 배열' 방식 으로 다 차원 배열 을 실현 하 는 것 이다. 즉, 1 차원 배열 의 모든 요소 도 table 대상 이다. 예 를 들 어:
1 mt = {}
2 for i = 1, N do
3 mt[i] = {}
4 for j = 1, M do
5 mt[i][j] = i * j
6 end
7 end
두 번 째 방식 은 2 차원 배열 의 색인 을 펼 치고 고정된 상수 로 2 차원 의 보폭 으로 하 는 것 이다. 예 를 들 어:
1 mt = {}
2 for i = 1, N do
3 for j = 1, M do
4 mt[(i - 1) * M + j] = i * j
5 end
6 end
3. 링크: table 은 동태 적 인 실체 이기 때문에 Lua 에서 링크 를 실현 하 는 것 이 편리 합 니 다.그 중에서 모든 노드 는 table 로 표 시 됩 니 다. 하나의 '링크' 는 노드 의 한 필드 일 뿐 이 필드 는 다른 table 에 대한 인용 을 포함 합 니 다. 예 를 들 어:
1 list = nil
2 for i = 1, 10 do
3 list = { next = list, value = i}
4 end
5
6 local l = list
7 while l do
8 print(l.value)
9 l = l.next
10 end
4. 대기 열과 양 방향 대기 열: Lua 에서 대기 열 을 실현 하 는 간단 한 방법 은 table 라 이브 러 리 함수 insert 와 reove 를 사용 하 는 것 입 니 다.그러나 이런 방법 은 후속 요소 의 이동 을 초래 할 수 있 기 때문에 대기 열의 데이터 양 이 비교적 많 을 때 이 방법 을 사용 하 는 것 을 권장 하지 않 는 다.아래 의 코드 는 더욱 효율 적 인 실현 방식 이다. 예 를 들 어:
1 List = {}
2
3 function List.new()
4 return {first = 0, last = -1}
5 end
6
7 function List.pushFront(list, value)
8 local first = list.first - 1
9 list.first = first
10 list[first] = value
11 end
12
13 function List.pushBack(list, value)
14 local last = list.last + 1
15 list.last = last
16 list[last] = value
17 end
18
19 function List.popFront(list)
20 local first = list.first
21 if first > list.last then
22 error("List is empty")
23 end
24 local value = list[first]
25 list[first] = nil
26 list.first = first + 1
27 return value
28 end
29
30 function List.popBack(list)
31 local last = list.last
32 if list.first > last then
33 error("List is empty")
34 end
35 local value = list[last]
36 list[last] = nil
37 list.last = last - 1
38 return value
39 end
5. 집합 과 가방 (Bag): Lua 에서 table 로 집합 을 실현 하 는 것 은 매우 간단 합 니 다. 다음 코드 를 보십시오. reserved = { ["while"] = true, ["end"] = true, ["function"] = true, } if not reserved["while"] then --do something end Lua 에 서 는 가방 (Bag) 을 MultiSet 로 볼 수 있 는데, 일반 집합 과 달리 이 용기 에 서 는 key 와 같은 원소 가 용기 에 여러 번 나타 날 수 있 도록 허용 한다.다음 코드 는 table 의 요소 에 계수 기 를 추가 하 는 방식 으로 이 데이터 구 조 를 모 의 합 니 다. 예 를 들 어:
1 function insert(bag, element)
2 bag[element] = (bag[element] or 0) + 1
3 end
4
5 function remove(bag, element)
6 local count = bag[element]
7 bag[element] = (count and count > 1) and count - 1 or nil
8 end
6. StringBuilder: Lua 에서 여러 문자열 을 하나의 큰 문자열 로 연결 하려 면 다음 과 같은 방식 으로 이 루어 질 수 있 습 니 다.
1 local buff = ""
2 for line in io.lines() do
3 buff = buff .. line .. "
"
4 end
위의 코드 는 확실히 정상적으로 작업 을 완성 할 수 있 지만, 줄 수가 비교적 많 을 때, 이러한 방법 은 대량의 메모리 재분배 와 메모리 간 의 데이터 복 사 를 초래 할 수 있 으 며, 이 로 인해 가 져 오 는 성능 비용 도 상당히 상당 하 다.사실 많은 프로 그래 밍 언어 에서 String 은 자바 와 같은 가 변 대상 이 므 로 이 방식 을 통 해 큰 문자열 을 여러 번 연결 하면 같은 성능 문 제 를 일 으 킬 수 있 습 니 다.이 문 제 를 해결 하기 위해 자바 에 서 는 StringBuilder 류 를 제공 하고 Lua 에 서 는 table 의 concat 방법 으로 이 문 제 를 해결 할 수 있 습 니 다. 다음 코드 를 참조 하 십시오.
1 local t = {}
2 for line in io.lines() do
3 t[#t + 1] = line .. "
"
4 end
5 local s = table.concat(t)
6
7 --concat , :
8 local t = {}
9 for line in io.lines() do
10 t[#t + 1] = line
11 end
12 local s = table.concat(t,"
")
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.