From 41fa91abec1c53db84e4abe0d009b6606d5e730c Mon Sep 17 00:00:00 2001 From: DinoBambino69 <48675489+DinoBambino69@users.noreply.github.com> Date: Thu, 27 May 2021 01:51:00 +0300 Subject: [PATCH] Iterator add --- Iterator_by_Ilalov_ts/CollectionImpl.ts | 24 ++++++++++++++++++++++++ Iterator_by_Ilalov_ts/ICollection.ts | 13 +++++++++++++ Iterator_by_Ilalov_ts/IIterator.ts | 6 ++++++ Iterator_by_Ilalov_ts/IteratorImpl.ts | 20 ++++++++++++++++++++ Iterator_by_Ilalov_ts/main.ts | 14 ++++++++++++++ 5 files changed, 77 insertions(+) create mode 100644 Iterator_by_Ilalov_ts/CollectionImpl.ts create mode 100644 Iterator_by_Ilalov_ts/ICollection.ts create mode 100644 Iterator_by_Ilalov_ts/IIterator.ts create mode 100644 Iterator_by_Ilalov_ts/IteratorImpl.ts create mode 100644 Iterator_by_Ilalov_ts/main.ts diff --git a/Iterator_by_Ilalov_ts/CollectionImpl.ts b/Iterator_by_Ilalov_ts/CollectionImpl.ts new file mode 100644 index 0000000..fdb6638 --- /dev/null +++ b/Iterator_by_Ilalov_ts/CollectionImpl.ts @@ -0,0 +1,24 @@ +import {ICollection} from "./ICollection"; +import {IIterator} from "./IIterator"; +import {IteratorImpl} from "./IteratorImpl"; + +//Реализация коллекции +export class CollectionImpl implements ICollection{ + private items: any[] = []; + + public getIterator(): IIterator { + return new IteratorImpl(this); + } + + public addItem(item: any): void { + this.items.push(item); + } + + public getItems(): any[] { + return this.items; + } + + public getLength(): number { + return this.items.length; + } +} diff --git a/Iterator_by_Ilalov_ts/ICollection.ts b/Iterator_by_Ilalov_ts/ICollection.ts new file mode 100644 index 0000000..6da84e3 --- /dev/null +++ b/Iterator_by_Ilalov_ts/ICollection.ts @@ -0,0 +1,13 @@ +import {IIterator} from "./IIterator"; + +export interface ICollection { + + //Вызов итератора + getIterator(): IIterator + //Добавление элемента + addItem(item): void + //Получение всех элементов + getItems(): any[] + //Получение количества элементов + getLength(): number +} diff --git a/Iterator_by_Ilalov_ts/IIterator.ts b/Iterator_by_Ilalov_ts/IIterator.ts new file mode 100644 index 0000000..71ca4ac --- /dev/null +++ b/Iterator_by_Ilalov_ts/IIterator.ts @@ -0,0 +1,6 @@ +export interface IIterator { + //Получить текущий элемент и перейти к следующему + getNext(): T; + //Проверить наличие следующего элемента + hasNext(): boolean; +} diff --git a/Iterator_by_Ilalov_ts/IteratorImpl.ts b/Iterator_by_Ilalov_ts/IteratorImpl.ts new file mode 100644 index 0000000..b5a8dfe --- /dev/null +++ b/Iterator_by_Ilalov_ts/IteratorImpl.ts @@ -0,0 +1,20 @@ +import {IIterator} from "./IIterator"; +import {ICollection} from "./ICollection"; + +//Реализация итератора +export class IteratorImpl implements IIterator { + private collection: ICollection; + private index: number = 0; + + constructor(collection: ICollection) { + this.collection = collection; + } + + public getNext(): any { + return this.collection.getItems()[this.index++]; + } + + public hasNext(): boolean { + return this.index < this.collection.getLength(); + } +} diff --git a/Iterator_by_Ilalov_ts/main.ts b/Iterator_by_Ilalov_ts/main.ts new file mode 100644 index 0000000..bb93d66 --- /dev/null +++ b/Iterator_by_Ilalov_ts/main.ts @@ -0,0 +1,14 @@ +import {CollectionImpl} from "./CollectionImpl"; + +const collection = new CollectionImpl(); +//Добавление элементов в коллекцию +collection.addItem(1); +collection.addItem('Two'); +collection.addItem(true); +collection.addItem([4, 5]); + +const iterator = collection.getIterator(); + +while (iterator.hasNext()) { + console.log(iterator.getNext()); +}