TypeScript Project : Sort

 mkdir sort

cd sort

mkdir src

mkdir build

code .

tsc --init

rootDir的路徑設定為    "rootDir": "./src",  

把outDir路徑設為"outDir": "./build",  

這樣ts檔跟編譯後的js檔產生路徑就設定好了

之後也可以嘗試tsc -w

可以直接編譯所有設定在rootDir的ts檔

但這樣每次都要下指令太麻煩了

所以可以在sort資料夾路徑用cmd下指令: npm init

先產生一個package.json檔

之後輸入指令npm install nodemon concurrently

加入nodemon 跟concurrently

然後修改裡面的script內容

  "scripts": {
    "start:build": "tsc -w",
    "start:run": "nodemon build index.js",
    "start": "concurrently npm:start:*"
  },

這表示每次都會同時啟動所有start:開頭的script

以上都設定好後,我們在src內新增一個index.ts檔

console.log("HELLO WORLD");
console.log("TEST");

然後在cmd輸入npm start






就可以看到他自動啟動我們剛剛設定在script內的指令了


接下來是project介紹

這個sort project是要實作演算法裡面的bubble sort

可以參考這個網址

https://pjchender.blogspot.com/2017/09/bubble-sort.html


在src下建立Sorter.ts

export abstract class Sorter {
  abstract compare(leftIndex: number, rightIndex: number): boolean;
  abstract swap(leftIndex: number, rightIndex: number): void;
  abstract length: number;

  sort(): void {
    const { length } = this;

    for (let i = 0; i < length; i++) {
      for (let j = 0; j < length - i - 1; j++) {
        if (this.compare(j, j + 1)) {
          this.swap(j, j + 1);
        }
      }
    }
  }
}

在src下建立NumberCollection.ts

import { Sorter } from './Sorter';

export class NumbersCollection extends Sorter {
  constructor(public data: number[]) {
    super();
  }

  get length(): number {
    return this.data.length;
  }

  compare(leftIndex: number, rightIndex: number): boolean {
    return this.data[leftIndex] > this.data[rightIndex];
  }

  swap(leftIndex: number, rightIndex: number): void {
    const leftHand = this.data[leftIndex];
    this.data[leftIndex] = this.data[rightIndex];
    this.data[rightIndex] = leftHand;
  }
}

把index.ts內容修改如下


import { NumbersCollection } from './NumbersCollection';
const numbersCollection = new NumbersCollection([50, 3, -5, 0]);
numbersCollection.sort();
console.log(numbersCollection.data);

之後執行npm start

就能看到bubble sort的結果了




0 Comments:

張貼留言