国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

學(xué)習(xí)javascript數(shù)據(jù)結(jié)構(gòu)(三)——集合

alphahans / 645人閱讀

摘要:前言總括本文講解了數(shù)據(jù)結(jié)構(gòu)中的集合概念,并使用實(shí)現(xiàn)了集合。原文博客地址學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)三集合知乎專(zhuān)欄簡(jiǎn)書(shū)專(zhuān)題前端進(jìn)擊者知乎前端進(jìn)擊者簡(jiǎn)書(shū)博主博客地址的個(gè)人博客人生多風(fēng)雨,何處無(wú)險(xiǎn)阻。敬請(qǐng)期待學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)四散列表

前言

總括: 本文講解了數(shù)據(jù)結(jié)構(gòu)中的[集合]概念,并使用javascript實(shí)現(xiàn)了集合。

原文博客地址:學(xué)習(xí)javascript數(shù)據(jù)結(jié)構(gòu)(三)——集合

知乎專(zhuān)欄&&簡(jiǎn)書(shū)專(zhuān)題:前端進(jìn)擊者(知乎)&&前端進(jìn)擊者(簡(jiǎn)書(shū))

博主博客地址:Damonare的個(gè)人博客

人生多風(fēng)雨,何處無(wú)險(xiǎn)阻。

正文 集合簡(jiǎn)介

在上一篇學(xué)習(xí)javascript數(shù)據(jù)結(jié)構(gòu)(二)——鏈表中我們說(shuō)了鏈表這種數(shù)據(jù)結(jié)構(gòu),但歸根結(jié)底,不論是棧,隊(duì)列亦或是鏈表都是線(xiàn)性結(jié)構(gòu)。他們都是一種很規(guī)矩的數(shù)據(jù)結(jié)構(gòu),就像幼兒園的小朋友排隊(duì)乖乖的站在那不會(huì)動(dòng)一樣。

然而紛雜的數(shù)據(jù)并不會(huì)總是排隊(duì)站在那里,幼兒園小朋友一旦下了課那可就撒歡了,亂糟糟一團(tuán)。可我們的幼兒園老師卻能分辨出這些小朋友,因?yàn)樯叮恳驗(yàn)槊總€(gè)小朋友都在一個(gè)班里,而且每一個(gè)小朋友都有自己的名字。老師自然很容易就找到小朋友了。

而本篇博文要說(shuō)的集合正是一堆亂糟糟的數(shù)據(jù),唯一的共同點(diǎn)是這些數(shù)據(jù)隸屬于同一個(gè)集合,看下百科給出的解釋?zhuān)?/p>

由一個(gè)或多個(gè)元素所構(gòu)成的叫做集合。

此處的元素就是小朋友了,他們所在的集合就是他們的班級(jí)。其實(shí)我們?cè)诟咧械臅r(shí)候也接觸過(guò)集合的概念。那時(shí)候還沒(méi)有套路這個(gè)名詞,單純的歲月,那個(gè)年代對(duì)于集合是這么解釋的:

集合是指具有某種特定性質(zhì)的具體的或抽象的對(duì)象匯總成的集體,這些對(duì)象稱(chēng)為該集合的元素。

然后又是這么分類(lèi)的:

空集:{}

有限集:{a,b,4}

無(wú)限集:{1,2,3,4...}

不過(guò),數(shù)據(jù)結(jié)構(gòu)中集合是沒(méi)有無(wú)限集這個(gè)概念的。再然后那時(shí)候的集合還有這么幾個(gè)特性:

確定性:給定一個(gè)集合,任給一個(gè)元素,該元素或者屬于或者不屬于該集合,二者必居其一,不允許有模棱兩可的情況出現(xiàn)。

互異性:一個(gè)集合中,任何兩個(gè)元素都認(rèn)為是不相同的,即每個(gè)元素只能出現(xiàn)一次。有時(shí)需要對(duì)同一元素出現(xiàn)多次的情形進(jìn)行刻畫(huà),可以使用多重集,其中的元素允許出現(xiàn)多次。

無(wú)序性:一個(gè)集合中,每個(gè)元素的地位都是相同的,元素之間是無(wú)序的。集合上可以定義序關(guān)系,定義了序關(guān)系后,元素之間就可以按照序關(guān)系排序。但就集合本身的特性而言,元素之間沒(méi)有必然的序。

想當(dāng)年哥還是個(gè)數(shù)學(xué)學(xué)霸,如今卻淪落為了一個(gè)碼農(nóng)......真是讓人唏噓啊。咳咳!接著說(shuō):

集合還有這幾種常見(jiàn)的基本操作:

并集

交集

差集

而且我們數(shù)據(jù)結(jié)構(gòu)中的集合基本是也符合高中時(shí)候的數(shù)學(xué)中的概念的。接下來(lái)我們是用ES5來(lái)實(shí)現(xiàn)集合,為啥子這么說(shuō)呢......因?yàn)樵贓S6中已經(jīng)新給出了Set,Map等幾個(gè)集合類(lèi),更加方便快捷的鎖定鍵值對(duì)。

集合的創(chuàng)建

首先我們先聲明一個(gè)集合類(lèi):

function(){
    var items={};
}

接下來(lái),我們需要給鏈表聲明一些方法:

add(value):向集合添加一個(gè)新的項(xiàng)

remove(value):從集合移除一個(gè)值

has(value):如果值在集合中,返回true,否則返回false

clear():移除集合中的所有項(xiàng)

size():返回集合所包含的元素?cái)?shù)量,與數(shù)組的length屬性相似

values():返回一個(gè)集合中所有值的數(shù)組

union(setName):并集,返回包含兩個(gè)集合所有元素的新集合(元素不重復(fù))

intersection(setName):交集,返回包含兩個(gè)集合中共有的元素的集合、

difference(setName):差集,返回包含所有存在本集合而不存在setName集合的元素的新集合

subset(setName):子集,驗(yàn)證setName是否是本集合的子集

下面是Set類(lèi)的完整代碼:

function Set() {
    let items = {};
    this.add = function(value){
        if (!this.has(value)){
            items[value] = value;
            return true;
        }
        return false;
    };
    this.delete = function(value){
        if (this.has(value)){
            delete items[value];
            return true;
        }
        return false;
    };
    this.has = function(value){
        return items.hasOwnProperty(value);
        //return value in items;
    };

    this.clear = function(){
        items = {};
    };
    /**
     * Modern browsers function
     * IE9+, FF4+, Chrome5+, Opera12+, Safari5+
     * @returns {Number}
     */
    this.size = function(){
        return Object.keys(items).length;
    };

    /**
     * cross browser compatibility - legacy browsers
     * for modern browsers use size function
     * @returns {number}
     */
    this.sizeLegacy = function(){
        let count = 0;
        for(let key in items) {
            if(items.hasOwnProperty(key))
                ++count;
        }
        return count;
    };
    /**
     * Modern browsers function
     * IE9+, FF4+, Chrome5+, Opera12+, Safari5+
     * @returns {Array}
     */
    this.values = function(){
        let values = [];
        for (let i=0, keys=Object.keys(items); i otherSet.size()){
            return false;
        } else {
            let values = this.values();
            for (let i=0; i

下面是ES6版本代碼:

let Set2 = (function () {
    const items = new WeakMap();
    class Set2 {
        constructor () {
            items.set(this, {});
        }
        add(value){
            if (!this.has(value)){
                let items_ = items.get(this);
                items_[value] = value;
                return true;
            }
            return false;
        }
        delete(value){
            if (this.has(value)){
                let items_ = items.get(this);
                delete items_[value];
                return true;
            }
            return false;
        }
        has(value){
            let items_ = items.get(this);
            return items_.hasOwnProperty(value);
        }
        clear(){
            items.set(this, {});
        }
        size(){
            let items_ = items.get(this);
            return Object.keys(items_).length;
        }
        values(){
            let values = [];
            let items_ = items.get(this);
            for (let i=0, keys=Object.keys(items_); i otherSet.size()){
                return false;
            } else {
                let values = this.values();
                for (let i=0; i
后記

集合是一種比較常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),在JS中我們已經(jīng)有了一種類(lèi)似哈希表的東西:Object(對(duì)象)。但現(xiàn)在我們所說(shuō)的集合只是以[value,value]形式存儲(chǔ)數(shù)據(jù),下一節(jié)我們使用[鍵,值]形式存儲(chǔ)數(shù)據(jù),和本文集合的實(shí)現(xiàn)略有不同。敬請(qǐng)期待:[學(xué)習(xí)javascript數(shù)據(jù)結(jié)構(gòu)(四)——散列表]

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/91179.html

相關(guān)文章

  • 學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法():集合

    摘要:至于這三個(gè)的具體概念,可以看圖中集合的實(shí)現(xiàn)首先,創(chuàng)建一個(gè)構(gòu)造函數(shù)。前端路漫漫,且行且歌的前端樂(lè)園原文鏈接寒假前端學(xué)習(xí)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法三集合 本系列的第一篇文章: 學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(一),棧與隊(duì)列第二篇文章:學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(二):鏈表第三篇文章:學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(三):集合第四篇文章:學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與...

    BDEEFE 評(píng)論0 收藏0
  • CSS技巧

    摘要:技巧使你的更加專(zhuān)業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項(xiàng)目看到原文。列舉了一些很實(shí)用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號(hào)分隔列表等等。排序算法看源碼,把它背下來(lái)吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實(shí)現(xiàn)。 成為專(zhuān)業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專(zhuān)業(yè)程序員的道路上,需要堅(jiān)持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...

    DangoSky 評(píng)論0 收藏0
  • CSS技巧

    摘要:技巧使你的更加專(zhuān)業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項(xiàng)目看到原文。列舉了一些很實(shí)用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號(hào)分隔列表等等。排序算法看源碼,把它背下來(lái)吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實(shí)現(xiàn)。 成為專(zhuān)業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專(zhuān)業(yè)程序員的道路上,需要堅(jiān)持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...

    zgbgx 評(píng)論0 收藏0
  • CSS技巧 - 收藏集 - 掘金

    摘要:筆者作為一位,將工作以來(lái)用到的各種優(yōu)秀資料神器及框架整理在此,畢竟好記性不如爛鍵盤(pán),此前端知識(shí)點(diǎn)大百科全書(shū)前端掘金,,不定期更新技巧前端掘金技巧,偶爾更新。計(jì)算數(shù)組的極值技巧使你的更加專(zhuān)業(yè)前端掘金一個(gè)幫你提升技巧的收藏集。 CSS 樣式畫(huà)各種圖形 - 前端 - 掘金下面是一些我在 CSS 中經(jīng)常用到的圖案,還有一些是在css-tricks看到的。記錄一下,以后會(huì)用到。會(huì)持續(xù)更新… 一、...

    Jonathan Shieber 評(píng)論0 收藏0
  • CSS技巧 - 收藏集 - 掘金

    摘要:筆者作為一位,將工作以來(lái)用到的各種優(yōu)秀資料神器及框架整理在此,畢竟好記性不如爛鍵盤(pán),此前端知識(shí)點(diǎn)大百科全書(shū)前端掘金,,不定期更新技巧前端掘金技巧,偶爾更新。計(jì)算數(shù)組的極值技巧使你的更加專(zhuān)業(yè)前端掘金一個(gè)幫你提升技巧的收藏集。 CSS 樣式畫(huà)各種圖形 - 前端 - 掘金下面是一些我在 CSS 中經(jīng)常用到的圖案,還有一些是在css-tricks看到的。記錄一下,以后會(huì)用到。會(huì)持續(xù)更新… 一、...

    SHERlocked93 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<