Nimのコレクション型
固定長のコンテナ
値型。代入するときはコピーされる
配列内の要素は全て同じ型
[]
で作る
Nimvar x = [1,2,3,4,5,6,7,8,9]
echo x
# 自作する場合
type IntArray = array[0..5, int] # 0..5がindexの配列
type IntArray = array[6, int] # 同じ
可変長な配列
要素の追加、削除が可能
ヒープに割り当てられ、GCの対象
よく使うmodule
Nimvar x: seq[int]
x = @[1,2,3,4,5,6] # `@`を使う
for i, value in @[3, 4, 5]:
echo "index: ", $i, ", value:", $value
パフォーマンス
openarray
例えば openarray
型が引数の関数は seq
にも array
にも使える
procの引数の型にしか指定できない
tables
他の言語のdictのようなもの
nimimport tables
var t = {"a": 1, "b": 2}.toTable
コレクション型に対する操作
foldl, foldr, mapIt,
↓ここに書くべきではない?「関数型」みたいなのつくる?
Nimecho @[1, 2, 3, 4, 5]
.map(proc(x: int): int = x * 2)
.filter(proc(x: int): bool = x < 5)
.foldl(a + b)
# -> 6
Nimimport sequtis
echo @[1, 2, 3, 4, 5]
.mapIt(it*2)
.filterIt(it < 5)
.foldl(a + b)