Ha

Halmazok ebben a kurzusban: JavaScript

2 feladat

A(z) Halmazok fogalomról

A JavaScriptben a halmaz egy listaszerű adatszerkezet, amely csak egyedi primitív értékeket és/vagy objektumhivatkozásokat tartalmazhat.

A halmazokat a Set konstruktorral kell létrehozni; kezdőértékeket úgy adhatsz meg nekik, hogy egy tömböt adsz át a konstruktornak.

const emptySet = new Set();
const setWithInitialValues = new Set(['hello', 'world']);

Elemek hozzáadása és eltávolítása

Egy értéket nem lehet hozzáadni a halmazhoz, ha szigorúan egyenlő a halmaz bármelyik elemével.

const set = new Set();
set.add(10);
set.add(10); // 10 is strictly equal to 10, so it can't be added again
set.size;
//=> 1;

set.has(10);
//=> true
set.delete(10);
//=> true; 10 was removed
set.delete(10);
//=> false; 10 is not in the set, so nothing happened

const obj = { color: 'magenta' };
const eerilySimilarObj = { color: 'magenta' };

set.add(obj);
set.add(eerilySimilarObj); // obj and eerilySimilarObj reference different objects, so they can both be added
set.size;
//=> 2

set.clear();
set.size;
//=> 0

Konvertálás halmazok és tömbök között

A tömböket a Set konstruktorral lehet halmazzá alakítani. A halmazokat tömbökké alakíthatod spread szintaxissal vagy az Array.from() segítségével.

const arrayWithDuplicates = [7, 3, 3, 9, 3];
const arrayWithoutDuplicates = [...new Set(arrayWithDuplicates)]; // [7, 3, 9]
const anotherArrayWithoutDuplicates = Array.from(new Set(arrayWithDuplicates)); // [7, 3, 9]

Iteráció

A halmaz egy kulcsolt gyűjtemény, ami azt jelenti, hogy az elemeit egy kulcs indexeli, és a beszúrás sorrendjében iterálhatók. Mivel egy halmazelem kulcsa és értéke ugyanaz, a Set.keys() és a Set.values() felcserélhetők.

const apples = ['Granny Smith', 'Honey Crisp', 'Royal Gala'];
const appleSet = new Set(apples);

for (let apple of appleSet.keys()) {
  console.log(apple);
}
// 'Granny Smith'
// 'Honey Crisp'
// 'Royal Gala'

for (let apple of appleSet.values()) {
  console.log(apple);
}
// 'Granny Smith'
// 'Honey Crisp'
// 'Royal Gala'

for (let apple of appleSet.entries()) {
  console.log(apple);
}
// ['Granny Smith', 'Granny Smith']
// ['Honey Crisp', 'Honey Crisp']
// ['Royal Gala', 'Royal Gala']

Keresési teljesítmény a tömbökkel szemben

Amikor egy halmazt választunk adatok tárolására (tömb helyett), az általában azért van, mert a tárolt értékeknek egyedinek kell lenniük. Mivel azonban az egyediséget tömbökkel is ki lehet kényszeríteni, nem feltétlenül nyilvánvaló, miért van ez így.

A rövid válasz az, hogy a halmazokat a keresésre optimalizálták, a tömböket nem. A tömb keresési metódusainak (például az Array.indexOf()) futásideje lineárisan nő a tömb méretével; vagyis minél több elemet tartalmaz a tömb, annál tovább tart a keresés benne. A halmaz keresési metódusainak futásideje ezzel szemben állandó, ami azt jelenti, hogy a halmaz méretétől függetlenül ugyanannyi marad.

A gyakorlatban azonban ez a teljesítménykülönbség elhanyagolható, kivéve, ha a gyűjtemény hatalmas mennyiségű adatot tartalmaz.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Halmazok fogalmat