API Basic List ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
List
ClassicUO โข Basic
List()๋ ์์๊ฐ ์๊ณ ๊ธธ์ด๋ฅผ ๋ฐ๊ฟ ์ ์๋ ์ปฌ๋ ์ ์ ๋ง๋ญ๋๋ค. ๋ฐํ ๊ฐ์ฒด๋ฅผ ๋ณ์์ ์ ์ฅํ์ธ์. items.Add๋ ๊ฐ์ฒด ๋ฉ์๋์ด๋ฉฐ ์ ์ญ List.Add ๋ช ๋ น์ ์์ต๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
List() -> Object:List
List(source:Array/List) -> Object:List
items.Add(value:Any) -> Unit
items.Insert(index:Number, value:Any) -> Unit
items.Item(index:Number) -> Any
items[index] = value
items.Set(index:Number, value:Any) -> Unit
items.Count() -> Integer
items.Contains(value:Any) -> Integer:1/0
items.IndexOf(value:Any) -> Integer:index/-1
items.Remove(value:Any) -> Integer:1/0
items.RemoveAt(index:Number) -> Unit
items.Clear() -> Unit
items.ToArray() -> Array
๋งค๊ฐ๋ณ์
sourceโ source: ์๋ตํ๋ฉด ๋น ์ปฌ๋ ์ ์ ๋๋ค. List๋ ๋ฐฐ์ด ๋๋ List, Dictionary๋ Dictionary๋ฅผ ๋ฐ์ต๋๋ค. ์ธ๋ถ ์ปจํ ์ด๋๋ง ๋ณต์ฌํ๊ณ ์ค์ฒฉ ์ฐธ์กฐ๋ ๊ณต์ ํฉ๋๋ค.index / keyโ index / key: List ์์น๋ 0๋ถํฐ ์์ํ๋ ์ ์ ์ซ์์ด๋ฉฐ Insert๋ Count()๋ ํ์ฉํฉ๋๋ค. Dictionary ํค๋ ํ ์คํธ ๋๋ ์ ํ ์ซ์์ ๋๋ค. ์ซ์ 1๊ณผ 1.0์ ๊ฐ์ ํค์ด๊ณ ํ ์คํธ "1"์ ๋ค๋ฆ ๋๋ค.valueโ value: ์ด๊ธฐํ๋ Basic ๊ฐ์ผ๋ก ๋ฐฐ์ด์ด๋ ์ปฌ๋ ์ ๋ ๊ฐ๋ฅํฉ๋๋ค. Unit์ ์ ์ฅํ ์ ์์ต๋๋ค. ์ซ์ ๊ฐ, ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ ๋ฌธ์์ด ๋๋ ๋ฐฐ์ด/๊ฐ์ฒด ์ฐธ์กฐ ๋์ผ์ฑ์ผ๋ก ๋น๊ตํฉ๋๋ค.fallbackโ fallback: ํค๊ฐ ์์ผ๋ฉด Get์ด ์ด ๋์ฒด๊ฐ์ ๋ฐํํ๊ณ ์ฝ์ ํ์ง ์์ต๋๋ค. fallback ์์ ํฌํจํ ๋ชจ๋ ์ธ์๋ ๋ฉ์๋ ํธ์ถ ์ ์ ๊ณ์ฐํฉ๋๋ค.
๋ฐํ๊ฐ
์์ฑ์๋ Object:List๋ฅผ ๋ฐํํฉ๋๋ค. Item/์ธ๋ฑ์ค๋ ์ ์ฅ๊ฐ, Count๋ ์์ ์, IndexOf๋ 0๋ถํฐ ์์ํ๋ ์์น ๋๋ -1์ ๋ฐํํฉ๋๋ค. Contains/Remove๋ 1=TRUE ๋๋ 0=FALSE, Add/Insert/Set/RemoveAt/Clear๋ Unit, ToArray๋ ์ Array๋ฅผ ๋ฐํํฉ๋๋ค.
๋์
- Add๋ ๋์ ์ถ๊ฐํ๊ณ Insert๋ ์์น ์์ ์ฝ์ ํ๋ฉฐ Set/์ธ๋ฑ์ค ๋์ ์ ๊ธฐ์กด ์์๋ฅผ ๊ต์ฒดํฉ๋๋ค. Item/์ธ๋ฑ์ค๋ ์ฝ์ต๋๋ค. Remove๋ ์ฒซ ๋ฒ์งธ ๊ฐ์ ๊ฐ, RemoveAt์ ์ง์ ์์น, Clear๋ ๋ชจ๋ ์์๋ฅผ ์ญ์ ํฉ๋๋ค.
- Contains๋ ์กด์ฌ ์ฌ๋ถ๋ฅผ, IndexOf๋ ์ฒซ ์ผ์น ์์น๋ฅผ ์ฐพ์ต๋๋ค. ์์, ์์, ํ ์คํธ ๋๋ ๋ฒ์ ๋ฐ ์ธ๋ฑ์ค๋ ์ก์ ์ ์๋ ์ค๋ฅ๋ฅผ ๋ด๊ณ ๋ชฉ๋ก์ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
- For Each๋ ์์๋ฅผ ์ ์งํฉ๋๋ค. ToArray๋ ์์ ์ค๋ ์ท์ ๋๋ค. ์๋ณธ ๋ชฉ๋ก์ ์์ ํ ๋ ์ด ์ค๋ ์ท์ ์ํํ์ธ์.
- ์ง์ For Each๋ฅผ ์คํํ๋ ๋์ Set์ ํฌํจํ ๋ณ๊ฒฝ์ ํ๋ฉด ๋ค์ ๋จ๊ณ์์ ์ก์ ์ ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. Try/Finally๋ ์ ์์ ์ผ๋ก ์ข ๋ฃํฉ๋๋ค. ์คํจํ ์์ ์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์ ์งํฉ๋๋ค.
- ๋ณ์นญ๊ณผ ByVal ์ธ์๋ ์ปฌ๋ ์ ์ ๊ณต์ ํฉ๋๋ค. ๋ณต์ฌ์ ์ค๋ ์ท์ ์ธ๋ถ ์ปจํ ์ด๋๋ง ๋ณต์ ํฉ๋๋ค. ์ธ๋ฑ์ค ByRef์ ๋ณตํฉ ๋์ ์ ์ปจํ ์ด๋/ํค๋ฅผ ํ ๋ฒ ๊ณ์ฐํ๋ฉฐ ๋ณ์ ๊ต์ฒด๊ฐ ์ ์ฅ๋ ๊ธฐ๋ก ์์น๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค.
- ๋ก์ปฌ ์คํฌ๋ฆฝํธ ๋ฐ์ดํฐ์ ๋๋ค. ๋ฉ์๋๋ ๊ฒ์ ์์ดํ ์ ์ฎ๊ธฐ๊ฑฐ๋ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ํ๋์ ์์๋ก ์ ์ฅ๋ ์์ดํ ๋ฌถ์์ ํ ์์น๋ฅผ ์ฐจ์งํฉ๋๋ค.
์์
1. ๋ชฉ๋ก ์์ฑ๊ณผ ํฉ๊ณ
# Add๋ก [3,7], Insert(1,5)๋ก [3,5,7], Set(0,2)๋ก [2,5,7]์ด ๋ฉ๋๋ค. For Each๊ฐ ์ธ ๊ฐ์ ๋ํฉ๋๋ค. Main์ Integer 14๋ฅผ ๋ฐํํฉ๋๋ค.
Option Explicit On
Sub Main()
Var items = List()
items.Add(3)
items.Add(7)
items.Insert(1, 5)
items.Set(0, 2)
Var total = 0
For Each item In items
total += item
Next
Return total
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
Add๋ก [3,7], Insert(1,5)๋ก [3,5,7], Set(0,2)๋ก [2,5,7]์ด ๋ฉ๋๋ค. For Each๊ฐ ์ธ ๊ฐ์ ๋ํฉ๋๋ค. Main์ Integer 14๋ฅผ ๋ฐํํฉ๋๋ค.
2. ๋ ๋ฆฝ ๋ณต์ฌ์ ์ค๋ ์ท
# seed=[4,6]์
๋๋ค. copied์ snapshot์ ๊ฐ์ ์ ์งํฉ๋๋ค. ์๋ณธ์ [9,6]์ด ๋๊ณ Remove(6)๋ TRUE=1์ ๋ฐํํฉ๋๋ค. RemoveAt(0)์ผ๋ก ๋น์์ง๊ณ Clear ํ์๋ ๋น์ด ์์ต๋๋ค. Main์ 4*100+6*10+1+0, Integer 461์ ๋ฐํํฉ๋๋ค.
Option Explicit On
Sub Main()
Dim seed[1]
seed[0] = 4
seed[1] = 6
Var items = List(seed)
Var copied = List(items)
Var snapshot = items.ToArray()
items[0] = 9
Var removed = items.Remove(6)
items.RemoveAt(0)
items.Clear()
Return snapshot[0]*100 + copied[1]*10 + removed + items.Count()
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
seed=[4,6]์ ๋๋ค. copied์ snapshot์ ๊ฐ์ ์ ์งํฉ๋๋ค. ์๋ณธ์ [9,6]์ด ๋๊ณ Remove(6)๋ TRUE=1์ ๋ฐํํฉ๋๋ค. RemoveAt(0)์ผ๋ก ๋น์์ง๊ณ Clear ํ์๋ ๋น์ด ์์ต๋๋ค. Main์ 4100+610+1+0, Integer 461์ ๋ฐํํฉ๋๋ค.
3. ๊ฒ์๊ณผ ByRef ์์
# NextIndex๋ ํ ๋ฒ ์คํ๋์ด calls=1, ์ธ๋ฑ์ค 0์
๋๋ค. Bump๊ฐ 5๋ฅผ 6์ผ๋ก ๋ฐ๊ฟ๋๋ค. Contains(6)=TRUE, IndexOf(6)=0, Item(0)์ 6์
๋๋ค. Main์ Integer 601์ ๋ฐํํฉ๋๋ค.
Option Explicit On
Function NextIndex(ByRef calls)
calls += 1
Return 0
End Function
Sub Bump(ByRef value)
value += 1
End Sub
Sub Main()
Var items = List()
items.Add(5)
Var calls = 0
Bump(items[NextIndex(calls)])
If items.Contains(6) AndAlso items.IndexOf(6) = 0 Then
Return items.Item(0)*100 + calls
End If
Return -1
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
NextIndex๋ ํ ๋ฒ ์คํ๋์ด calls=1, ์ธ๋ฑ์ค 0์ ๋๋ค. Bump๊ฐ 5๋ฅผ 6์ผ๋ก ๋ฐ๊ฟ๋๋ค. Contains(6)=TRUE, IndexOf(6)=0, Item(0)์ 6์ ๋๋ค. Main์ Integer 601์ ๋ฐํํฉ๋๋ค.