Nimのiteratorの使い方
概要
Nimのiteratorの使い方を下記にまとめる
ソースコード
1行目~3行目
type Animal = object name: string age: int
Animalを定義。
要素は2つで、nameとageのみ。
5行目~6行目
type AnimalBox = object animals: seq[Animal]
AnimalBoxを定義。
要素は1つでAnimal 型のsequenceをanimalsとして所持する。
8行目~13行目
iterator eachName(box: AnimalBox): string = let length = box.animals.len var i = 0 while i < length: yield box.animals[i].name inc i
eachNameというiteratorをAnimalBoxに取り付ける。
Nimではiteratorを定義する時iteratorと書く。
非常にわかりやすい。
この例では、animalsのnameを1つずつ取り出すiteratorを定義。
15行目~20行目
iterator eachNameAndAge(box: AnimalBox): tuple[a: string, b: int] = let length = box.animals.len var i = 0 while i < length: yield ( box.animals[i].name, box.animals[i].age ) inc i
2つめのiteratorを定義。
今度は、nameとageのtupleを1つずつ取り出す。
22行目~35行目
let dog = Animal(name: "dog", age: 5) let cat = Animal(name: "cat", age: 4) let bird = Animal(name: "bird", age: 3) let animalBox = AnimalBox(animals: @[dog, cat, bird]) echo "animalBox.eachName:" for name in animalBox.eachName(): echo name echo "" echo "animalBox.eachNameAndAge:" for pair in animalBox.eachNameAndAge(): echo pair
AnimalBoxにとりつけた、iteratorを使用する。
可読性が高く使いやすい。
出力結果
animalBox.eachName dog cat bird animalBox.eachNameAndAge (a: "dog", b: 5) (a: "cat", b: 4) (a: "bird", b: 3)