Set (datatyp)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 7 juli 2018; kontroller kräver 2 redigeringar .

En uppsättning är en datatyp och struktur inom datavetenskap , som är en implementering av den matematiska objektuppsättningen .

Datatypuppsättningen låter dig lagra ett begränsat antal värden av en viss typ i ingen speciell ordning. Upprepning av värden är i allmänhet inte tillåtet. Förutom att en mängd är ändlig i programmering, motsvarar den i allmänhet begreppet en matematisk mängd. För denna typ tillhandahåller programmeringsspråk vanligtvis standardoperationer.

Beroende på ideologin behandlar olika programmeringsspråk en uppsättning som en enkel eller komplex datatyp.

Implementeringar

Spelar in Pascal

I Pascal är en uppsättning en sammansatt datatyp som lagrar information om närvaron i en uppsättning objekt av vilken typ som helst. Kraften av denna typ bestämmer storleken på uppsättningen - 1 bit per element. Turbo Pascal har en gräns på 256 element, vissa andra implementeringar lossar denna gräns.

Ett exempel på att arbeta med set:

typ {definiera den uppräknade bastypen och intervalltypen för uppsättningar} färger = ( röd , grön , blå ) ; små siffror = 0 .. 10 ; {definiera uppsättningar från våra typer} färguppsättning = uppsättning färger ; nummeruppsättning = uppsättning små siffror ; {du behöver inte ställa in typen separat} anothernumberset = set av 0 .. 20 ; {declaring set type variables} var nset1 , nset2 , nset3 : numberset ; cset : colorset ; börja nset1 := [ 0 , 2 , 4 , 6 , 8 , 10 ] ; {set as a set constructor} cset := [ röd , blå ] ; {enkel uppräkning av element} nset2 := [ 1 , 3 , 9 , 7 , 5 ] ; {uppräkningsordningen är oviktig} nset3 := [] ; {tom set} inkluderar ( nset3 , 7 ) ; {lägg till element} exkludera ( nset3 , 7 ) ; {element excluded} nset1 := [ 0 .. 5 ] ; {möjligt att ställa in element efter intervall} nset3 := nset1 + nset2 ; {union} nset3 := nset1 * nset2 ; {korsning} nset3 := nset1 - nset2 ; {skillnad} om ( 5 i nset2 ) eller {testa för elementförekomst} ( grön i cset ) sedan {...} slut .

Sätter in C++

Ett exempelprogram som använder uppsättningsstrukturen för att implementera kataloger:

vektor < sträng > vec ; void f ( vektor < sträng > vec1 , int nivå ) { set < sträng > set ; for ( int i = 0 ; i < vec1 . storlek (); i ++ ) { intk = vec1 [ i ] . hitta ( '/' ); if ( k != sträng :: npos ) { sträng s1 = vec1 [ i ]. substr ( 0 , k ); set . infoga ( s1 ); } } for ( set < string > :: iterator it = set . begin (); it != set . end (); it ++ ) { vektor < sträng > vec2 ; for ( int i = 0 ; i < vec1 . storlek (); i ++ ) { intk = vec1 [ i ] . hitta ( '/' ); if ( k != sträng :: npos && vec1 [ i ]. substr ( 0 , k ) == ( * it )) { sträng s1 = vec1 [ i ]; s1 . radera ( 0 , k + 1 ); vec2 . push_back ( s1 ); } } for ( int i = 0 ; i < nivå ; i ++ ) { cout << '+' ; } cout << * it << endl ; f ( vec2 , nivå + 1 ); } } int main () { int n ; cin >> n ; for ( int i = 0 ; i < n ; i ++ ) { sträng s ; cin >> s ; s += '/' ; vec . push_back ( s ); } f ( vec , 0 ); returnera 0 ; }

Sätter in JavaScript

En uppsättning i JavaScript är en datastruktur som används för att lagra en uppsättning värden som inte har index eller nycklar (men inuti datastrukturen måste de ha en ordning, till exempel ett index i en array, men en uppsättning sammanfattar oss från denna implementeringsfunktion).

Ange objekt

Set är en samling för att lagra många värden, och varje värde kan bara förekomma en gång.

Metoder

set.has(item) - returnerar sant om objektet finns i samlingen, annars - false;

set.add(item) - lägger till objekt i setet, returnerar set. Om du försöker lägga till en befintlig kommer ingenting att hända;

set.clear() - rensar uppsättningen;

set.delete(item) - tar bort ett objekt från setet, returnerar sant om det fanns där, annars falskt.

Itererar över element

görs via for..of eller forEach

'använd strikt' ; let set = new Set ([ 'första' , 'andra' , 'tredje' ]); for ( låt värde av set ) { konsol . log ( värde ); }; // första andra tredje // samma ställ in . forEach (( value , valueAgain , set ) => { konsol . log ( värde ); }); // första andra tredje

Värdet i argumenten upprepas för kompatibilitet med Map , där .forEach-funktionen också har tre argument. Men i Set matchar de två första alltid och innehåller nästa värde i uppsättningen

Ge exempel

const union = ( s1 , s2 ) => ny uppsättning ([... s1 , ... s2 ]); // uppsättning av alla värden s1 och s2 const intersection = ( s1 , s2 ) => ny uppsättning ( [... s1 ]. filter ( v => s2 . har ( v )) ); // uppsättning värden som finns i både s1 och s2 const skillnad = ( s1 , s2 ) => ny uppsättning ( [... s1 ]. filter ( v => ! s2 . har ( v )) ); // uppsättning värden som är i s1 men inte i s2 const komplement = ( s1 , s2 ) => skillnad ( s2 , s1 ); // uppsättning korta värden är i s2 men inte i s1 const städer1 = ny uppsättning ([ 'Beijing' , 'Kiev' ]); const city2 = ny uppsättning ([ 'Kiev' , 'London' , 'Baghdad' ]); const operationer = [ union , skärningspunkt , skillnad , komplement ]; konst resultat = operationer . karta ( operation => ({ [ operation . namn ] : operation ( städer1 , städer2 ) })); konsol . dir ({ städer1 , städer2 }); konsol . dir ( resultat );

Länkar

Ställ in på Github-förrådet HowProgrammingWorks/Set