多重巢狀 for 迴圈太醜,執行效率又低,有沒有什麼辦法可以降低它的巢狀層數?遊戲內怎麼簡潔優雅的獲取我想要的資料,又有良好的智慧提示效果? 有沒有通用的提高執行效率的方案?沒錯,ES6 的 Map 就是為你定製的。 先看一個簡單的例子,陣列去重:
上面用了最基本的2重 for 迴圈遍歷陣列達到去重的效果,程式碼執行效率低,時間複雜度達到了O(n2),如何最佳化成一重for迴圈呢?用 Map 試一試! Map 是 ES6 新出的一種資料結構,用來表示鍵值對,object也是鍵值對結構,Map算是對object的一種加強,object的鍵只能為string,Map的鍵可以為任意值。我們用Map來儲存中間遍歷的值,從而可以達到一輪for迴圈就完成去重的目的,如下:
很明顯,上面透過 Map 減少了一層for迴圈,將時間複雜度降到了O(n),提高了執行效率。 Map這種鍵值對結構(字典,雜湊表),可以直接根據鍵名找到對應的值,不需要遍歷,大大提高了查詢的效率。我們常用的物件和陣列結構也有同樣的效果,但是Map功能更強大,配合ts的智慧提示效果更好。 理論分析:為什麼用 Map 能提高執行效率呢,仔細思考,發現,這個裡面蘊含了一個重要的計算機理論知識——空間換時間!計算機理論裡面,對於一個演算法,他的時間負責度和空間複雜度是對立的。簡單的理解就是,佔用空間多,執行就快,佔用空間少,執行就慢。上面的 Map 就是開闢的額外儲存空間,用來儲存一些中間狀態,從而將2重 for 迴圈降低為1重 for 迴圈,降低了執行時間。 Map的強大還體現在他的充足的智慧提示的地方:let and宣告。
上面透過宣告鍵和值的型別,當呼叫對應的 API 時候,會對引數和返回型別有一個提示作用,這是物件和陣列沒有的優勢,而且 Map 的 key 也可以為物件等任意型別,這在有些地方也能起到意向不到的方便作用。 所以遊戲中,凡是想提高執行效率,想降低查詢等時間消耗的地方,都請儘可能的用Map來解決吧,這一定是一個百試不爽的萬精油方案,而
多重巢狀 for 迴圈太醜,執行效率又低,有沒有什麼辦法可以降低它的巢狀層數?遊戲內怎麼簡潔優雅的獲取我想要的資料,又有良好的智慧提示效果? 有沒有通用的提高執行效率的方案?沒錯,ES6 的 Map 就是為你定製的。 先看一個簡單的例子,陣列去重:
上面用了最基本的2重 for 迴圈遍歷陣列達到去重的效果,程式碼執行效率低,時間複雜度達到了O(n2),如何最佳化成一重for迴圈呢?用 Map 試一試! Map 是 ES6 新出的一種資料結構,用來表示鍵值對,object也是鍵值對結構,Map算是對object的一種加強,object的鍵只能為string,Map的鍵可以為任意值。我們用Map來儲存中間遍歷的值,從而可以達到一輪for迴圈就完成去重的目的,如下:
很明顯,上面透過 Map 減少了一層for迴圈,將時間複雜度降到了O(n),提高了執行效率。 Map這種鍵值對結構(字典,雜湊表),可以直接根據鍵名找到對應的值,不需要遍歷,大大提高了查詢的效率。我們常用的物件和陣列結構也有同樣的效果,但是Map功能更強大,配合ts的智慧提示效果更好。 理論分析:為什麼用 Map 能提高執行效率呢,仔細思考,發現,這個裡面蘊含了一個重要的計算機理論知識——空間換時間!計算機理論裡面,對於一個演算法,他的時間負責度和空間複雜度是對立的。簡單的理解就是,佔用空間多,執行就快,佔用空間少,執行就慢。上面的 Map 就是開闢的額外儲存空間,用來儲存一些中間狀態,從而將2重 for 迴圈降低為1重 for 迴圈,降低了執行時間。 Map的強大還體現在他的充足的智慧提示的地方:let and宣告。
上面透過宣告鍵和值的型別,當呼叫對應的 API 時候,會對引數和返回型別有一個提示作用,這是物件和陣列沒有的優勢,而且 Map 的 key 也可以為物件等任意型別,這在有些地方也能起到意向不到的方便作用。 所以遊戲中,凡是想提高執行效率,想降低查詢等時間消耗的地方,都請儘可能的用Map來解決吧,這一定是一個百試不爽的萬精油方案,而