Joukko on tietojenkäsittelytieteen tietotyyppi ja rakenne , joka on matemaattisen objektijoukon toteutus .
Tietotyyppijoukon avulla voit tallentaa rajoitetun määrän tietyn tyyppisiä arvoja missään järjestyksessä. Arvojen toistaminen ei yleensä ole sallittua. Paitsi, että joukko on ohjelmoinnissa äärellinen, se vastaa yleensä matemaattisen joukon käsitettä. Tälle tyypille ohjelmointikielet tarjoavat yleensä standardijoukkotoimintoja.
Ideologiasta riippuen eri ohjelmointikielet käsittelevät joukkoa yksinkertaisena tai monimutkaisena tietotyyppinä.
Pascalissa joukko on yhdistelmätietotyyppi, joka tallentaa tietoa minkä tahansa laskettavan tyyppisten objektien joukosta. Tämän tyypin teho määrittää joukon koon - 1 bitti per elementti. Turbo Pascalilla on 256 elementin raja, jotkut muut toteutukset löystävät tätä rajaa.
Esimerkki sarjojen kanssa työskentelystä:
tyyppi {määritä joukoille luetteloitu perustyyppi ja aluetyyppi} värit = ( punainen , vihreä , sininen ) ; pienet luvut = 0 .. 10 ; {määritä joukot tyypeistämme } colorset = värijoukko ; numerojoukko = pienten lukujen joukko ; {tyyppiä ei tarvitse asettaa erikseen} othernumberset = joukko 0 .. 20 ; {joukkotyyppimuuttujien ilmoittaminen} var nset1 , nset2 , nset3 : numerojoukko ; cset : värisarja ; aloita nset1 := [ 0 , 2 , 4 , 6 , 8 , 10 ] ; {set as a set constructor} cset := [ punainen , sininen ] ; {yksinkertainen elementtien luettelo} nset2 := [ 1 , 3 , 9 , 7 , 5 ] ; {lukujärjestys on merkityksetön} nset3 := [] ; {tyhjä joukko} include ( nset3 , 7 ) ; {lisää elementti} sulkea pois ( nset3 , 7 ) ; {elementti poissuljettu} nset1 := [ 0 .. 5 ] ; {mahdollinen asettaa elementtejä alueen mukaan} nset3 := nset1 + nset2 ; {liitto} nset3 := nset1 * nset2 ; {risteys} nset3 := nset1 - nset2 ; {ero} if ( 5 in nset2 ) tai {testaa elementin esiintyminen} ( vihreä csetissä ) then { …} end .Esimerkkiohjelma, joka käyttää asetettua rakennetta hakemistojen toteuttamiseen:
vektori < merkkijono > vec ; void f ( vektori < merkkijono > vec1 , int taso ) { set < string > sett ; for ( int i = 0 ; i < vec1 . koko (); i ++ ) { intk = vec1 [ i ] . etsi ( '/' ); if ( k != merkkijono :: npos ) { merkkijono s1 = vec1 [ i ]. substr ( 0 , k ); sett . insert ( s1 ); } } for ( sett < string > :: iterator it = sett . begin (); it != sett . end (); it ++ ) { vektori < merkkijono > vec2 ; for ( int i = 0 ; i < vec1 . koko (); i ++ ) { intk = vec1 [ i ] . etsi ( '/' ); if ( k != string :: npos && vec1 [ i ]. substr ( 0 , k ) == ( * it )) { merkkijono s1 = vec1 [ i ]; s1 . pyyhkiä ( 0 , k + 1 ); vec2 . push_back ( s1 ); } } for ( int i = 0 ; i < taso ; i ++ ) { cout << '+' ; } cout << * it << endl ; f ( vec2 , taso + 1 ); } } int main () { int n ; cin >> n ; for ( int i = 0 ; i < n ; i ++ ) { merkkijono s ; cin >> s ; s += '/' ; vec . push_back ( t ); } f ( vek , 0 ); paluu 0 ; }JavaScriptin joukko on tietorakenne, jota käytetään tallentamaan joukko arvoja, joilla ei ole indeksejä tai avaimia (mutta tietorakenteen sisällä niillä on oltava järjestys, esim. hakemisto taulukossa, mutta joukko abstrakteja meille tästä toteutusominaisuudesta).
Set on kokoelma useiden arvojen tallentamiseen, ja jokainen arvo voi esiintyä vain kerran.
menetelmät
set.has(item) - palauttaa tosi, jos kohde on kokoelmassa, muussa tapauksessa - false;
set.add(item) - lisää kohteen joukkoon, palauttaa joukon. Jos yrität lisätä olemassa olevan, mitään ei tapahdu;
set.clear() - tyhjentää joukon;
set.delete(item) - poistaa kohteen joukosta, palauttaa tosi, jos se oli siellä, false muussa tapauksessa.
Iterointi elementtien yli
tehty kautta..of tai forEach
'käytä tiukkaa' ; let set = new Set ([ 'ensimmäinen' , 'toinen' , 'kolmas' ]); for ( anna joukon arvo ) { _ konsoli . log ( arvo ); }; // ensimmäinen toinen kolmas // sama asettaa . forEach (( arvo , arvoAgain , set ) => { konsoli . log ( arvo ); }); // ensimmäinen toinen kolmasArgumenttien arvo toistetaan yhteensopivuuden varmistamiseksi Map -funktion kanssa , jossa .forEach-funktiolla on myös kolme argumenttia. Mutta Setissä kaksi ensimmäistä vastaavat aina ja sisältävät joukon seuraavan arvon
Näytä esimerkkiä
const union = ( s1 , s2 ) => new Set ([... s1 , ... s2 ]); // kaikkien arvojen s1 ja s2 joukko const leikkaus = ( s1 , s2 ) => new Set ( [... s1 ]. suodatin ( v => s2 . sisältää ( v )) ); // joukko arvoja, jotka ovat sekä s1:ssä että s2:ssa const ero = ( s1 , s2 ) => new Set ( [... s1 ]. suodatin ( v => ! s2 . sisältää ( v )) ); // joukko arvoja, jotka ovat s1:ssä mutta eivät s2:ssa const komplementti = ( s1 , s2 ) => erotus ( s2 , s1 ); // lyhyiden arvojen joukko on s2:ssa, mutta ei s1:ssä const kaupungit1 = uusi joukko ([ 'Peking' , 'Kiova' ]); const kaupungit2 = uusi joukko ([ 'Kiova' , 'Lontoo' , 'Bagdad' ]); const operaatiot = [ liitto , leikkaus , ero , komplementti ]; const tulokset = operaatiot . kartta ( operaatio => ({ [ operaatio . nimi ] : toiminta ( kaupungit1 , kaupungit2 ) })); konsoli . dir ({ kaupungit1 , kaupungit2 }); konsoli . dir ( tulokset );Aseta Githubin arkistoon HowProgrammingWorks/Set
Tietotyypit | |
---|---|
Käsittämätön | |
Numeerinen | |
Teksti | |
Viite | |
Komposiitti | |
abstrakti | |
muu | |
liittyvät aiheet |
Tietorakenteet | |
---|---|
Luettelot | |
puut | |
Laskee | |
muu |