Nimのコレクション型
配列型 Arrays
固定長のコンテナ
値型。代入するときはコピーされる
配列内の要素は全て同じ型
[]で作る
code:Nim
var x = 1,2,3,4,5,6,7,8,9
echo x
# 自作する場合
type IntArray = array0..5, int # 0..5がindexの配列
type IntArray = array6, int # 同じ
シーケンス型 Sequences
可変長な配列
要素の追加、削除が可能
ヒープに割り当てられ、GCの対象
よく使うmodule
sequtils、algorithm
code:Nim
var x: seqint
x = @1,2,3,4,5,6 # @を使う
for i, value in @3, 4, 5:
echo "index: ", $i, ", value:", $value
https://qiita.com/tauplus/items/fdf547ed86abb006a4fe
パフォーマンス
openarray
例えばopenarray型が引数の関数はseqにもarrayにも使える
procの引数の型にしか指定できない
tables
tablesをimportして使う
他の言語のdictのようなもの
code:nim
import tables
var t = {"a": 1, "b": 2}.toTable
https://qiita.com/6in/items/61d16b4b86dcd15dedc5#tables-サンプル
http://nim-memo.hatenablog.com/entry/2016/09/24/144838
コレクション型に対する操作
Document
https://qiita.com/6in/items/61d16b4b86dcd15dedc5
foldl, foldr, mapIt,
https://blog.mamansoft.net/2018/04/22/nim-github-search-tool/
↓ここに書くべきではない?「関数型」みたいなのつくる?
code:Nim
echo @1, 2, 3, 4, 5
.map(proc(x: int): int = x * 2)
.filter(proc(x: int): bool = x < 5)
.foldl(a + b)
# -> 6
code:Nim
import sequtis
echo @1, 2, 3, 4, 5
.mapIt(it*2)
.filterIt(it < 5)
.foldl(a + b)