Laya Dictionary Object

package laya.utils {
    
    /**
     * <code>Dictionary</code> 是一個字典型的數據存取類。
     */
    public class Dictionary {
        private var _values:Array = [];
        private var _keys:Array = [];
        
        /**
         * 獲取所有的子元素列表。
         */
        public function get values():Array {
            return _values;
        }
        
        /**
         * 獲取所有的子元素鍵名列表。
         */
        public function get keys():Array {
            return _keys;
        }
        
        /**
         * 給指定的鍵名設置值。
         * @param   key 鍵名。
         * @param   value 值。
         */
        public function set(key:*, value:*):void {
            var index:int = indexOf(key);
            if (index >= 0) {
                _values[index] = value;
                return;
            }
            _keys.push(key);
            _values.push(value);
        }
        
        /**
         * 獲取指定對象的鍵名索引。
         * @param   key 鍵名對象。
         * @return 鍵名索引。
         */
        public function indexOf(key:Object):int {
            var index:int = _keys.indexOf(key);
            if (index >= 0) return index;
            key = (key is String) ? Number(key) : ((key is Number) ? key.toString() : key);
            return _keys.indexOf(key);
        }
        
        /**
         * 返回指定鍵名的值。
         * @param   key 鍵名對象。
         * @return 指定鍵名的值。
         */
        public function get(key:*):* {
            var index:int = indexOf(key);
            return index < 0 ? null : _values[index];
        }
        
        /**
         * 移除指定鍵名的值。
         * @param   key 鍵名對象。
         * @return 是否成功移除。
         */
        public function remove(key:*):Boolean {
            var index:int = indexOf(key);
            if (index >= 0) {
                _keys.splice(index, 1);
                _values.splice(index, 1);
                return true;
            }
            return false;
        }
        
        /**
         * 清除此對象的鍵名列表和鍵值列表。
         */
        public function clear():void {
            _values.length = 0;
            _keys.length = 0;
        }
    }
}

上面源代碼可以看到indexOf方法的效率很差。參考引擎自帶的Dictionary為什么不直接使用as的Dictionary類,官方給出的答復是"因為LayaAir運行出來的是js。即便是AS3版本,最終運行在瀏覽器的也是js。而js中沒有Dictionary"

這一點和AS3是一樣的,就是Object只能以string作為key,但是Dictionary可以把Object來做為key。如果我們沒有Object作為key的需求,還是用Object效率會好一些。

end

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,767評論 18 399
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,413評論 0 6
  • 轉至元數據結尾創建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數據起始第一章:isa和Class一....
    40c0490e5268閱讀 1,776評論 0 9
  • 第16天 為新生兒洗澡 健康的寶寶,只要條件許可,出生后第2天起就可以洗澡。這樣不但能清潔皮膚,還可以加速血液?環...
    靜如止水1閱讀 2,018評論 0 3
  • I
    Mr_姜小白閱讀 163評論 0 0