Anarkin

TypeScript playgrounds

Mar 8th, 2015
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.17 KB | None | 0 0
  1. interface IEnumerable<T>
  2. {
  3.     getEnumerator(): IEnumerator<T>;
  4. }
  5.  
  6.  
  7. interface IEnumerator<T>
  8. {
  9.     current: T;
  10.  
  11.     moveNext(): boolean;
  12.  
  13.     reset(): void;
  14. }
  15.  
  16.  
  17. class List<T> implements IEnumerable<T>
  18. {
  19.     constructor(private data?: T[])
  20.     {
  21.     }
  22.  
  23.     getEnumerator(): IEnumerator<T>
  24.     {
  25.         return new ListEnumerator<T>(this.data);
  26.     }
  27. }
  28.  
  29.  
  30. class ListEnumerator<T> implements IEnumerator<T>
  31. {
  32.     private idx: number;
  33.  
  34.     constructor(private data: T[])
  35.     {
  36.         this.reset();
  37.     }
  38.  
  39.     moveNext(): boolean
  40.     {
  41.         return ++this.idx < this.data.length;
  42.     }
  43.  
  44.     reset(): void
  45.     {
  46.         this.idx = -1;
  47.     }
  48.  
  49.     get current(): T
  50.     {
  51.         return this.data[this.idx];
  52.     }
  53. }
  54.  
  55. class Enumerable
  56. {
  57.     static forEach<T>(enumerable: IEnumerable<T>, f: (current: T) => void)
  58.     {
  59.         var enumerator = enumerable.getEnumerator();
  60.         while (enumerator.moveNext())
  61.         {
  62.             f(enumerator.current);
  63.         }
  64.     }
  65. }
  66.  
  67.         var list = new List<number>([1, 2, 3, 4]);
  68.         Enumerable.forEach(list, current =>
  69.         {
  70.             console.log(current.toString());
  71.         });
Advertisement
Add Comment
Please, Sign In to add comment