本文實例講述了JS中的算法與數據結構之集合(Set)。分享給大家供大家參考,具體如下:
同數學中所學的一樣,集合(Set)是由一組無序但彼此之間又有一定關系性的成員構成,每個成員在集合中只能出現一次,不同于我們之前說的字典,鏈表之類的,它是一種包含了不同元素的數據結構(集合中的元素稱為成員),從其定義中我們可以看出它具有兩個很重要的特征:首先,集合中的成員是無序的,其次,集合中的成員是不相同的,即集合中不存在相同的成員。
實際上,很多編程語言中,集合并不是一種數據類型,但是如果你需要創建一個數據結構用來保存一些獨一無二的元素時,集合就變得很有用了,接下來我們一起來看看JS中如何實現一個集合。
我們要實現一個集合,首先要對其一些定義做了解
不包含任何成員的集合稱為空集,包含一切可能成員的集合稱為全集。 如果兩個集合里的成員都完全相同,則稱兩個集合相等。 如果一個集合所有成員都包含于另一個集合,則前一集合稱為后一集合的一個子集。通常來說,集合的基本操作有以下三種:
并集:將兩個集合中的成員進行合并,得到一個新的集合 交集:將兩個集合中共同存在的成員組成的一個新的集合 補集:屬于一個集合而不屬于另一個集合的成員組成的新的集合集合(Set)的實現我們這里基于數組,用數組來存儲數據,根據我們之前學習的以及上面提到的一些方法,我們可以將集合的構造函數定義如下(為了區別ES6的 set 類型,我們這里選擇用 MySet 命名):
//構造函數function MySet () { this.dataStore = []; // 數據存儲 this.add = add; // 添加成員 this.remove = remove; // 刪除成員 this.size = size; // 集合元素個數 this.union = union; // 集合求并集 this.intersect = intersect; // 集合求交集 this.subset = subset; // 判斷一個集合是否是另一集合的子集 this.difference = difference; // 集合求補集 this.contains = contains; // 判斷某成員是否屬于該集合 this.show = show; // 顯示當前集合}我們第一個要實現的方法就是向集合中添加一個成員,即 add 方法
add:向集合中添加一個成員
//添加元素function add (data) { //判斷元素是否存在集合當中 if( this.dataStore.indexOf( data ) < 0 ){ this.dataStore.push(data); return true; }else{ console.warn( 'Can not add ' + data + ', must already be in set'); return false; }}我們之前提到,集合中的元素是獨一無二的,因此,我們在將數據存儲到數組之前,首先就是要確保該集合不存在該數據,因此,我們先用 indexOf 方法檢查新加入的元素是否存在,如果找到了就返回該成員在數組中的位置;否則,就返回 -1 ,那么對應的 add 方法就可以定義返回布爾值,添加成功我們返回 true , 否則返回 false ,這樣就可以明確告訴我們是否正確的插入了一個元素。
新聞熱點
疑難解答
圖片精選