✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

So erstellen Sie eine bidirektionale Karte in JavaScript

11

Eine bidirektionale Karte ist ein Modell aus der Informatik, bei dem Schlüssel-Wert-Paare eine bijektive 1-1-Beziehung zwischen den Schlüsseln und den Werten haben. Dies ermöglicht es uns, nicht nur nach Schlüssel abzufragen und einen Wert zu erhalten, sondern auch nach Wert abzufragen und den Schlüssel zu erhalten. Sehen wir uns an, wie eine bidirektionale Karte in JavaScript implementiert wird, und machen wir sie später in TypeScript typsicher

Die Informatik und Mathematik dahinter

Lassen Sie uns eine grundlegende Definition einer bidirektionalen Karte erfassen:

In der Informatik ist eine bidirektionale Karte eine assoziative Datenstruktur, bei der die Schlüssel-Wert-Paare eine Eins-zu-Eins-Korrespondenz bilden. Somit ist die binäre Beziehung in jeder Richtung funktionsfähig: Jeder Wert kann auch auf einen eindeutigen Schlüssel abgebildet werden.

So erstellen Sie eine bidirektionale Karte in JavaScript

Kredit: Bidirektionale Karte

Die bidirektionale Karte aus der Informatik hat ihre Wurzeln in einer mathematischen Funktion namens Bijektion. Die Beziehung zwischen den Komponenten eines Paares mit jeder seiner Komponenten in verschiedenen Mengen ist eine bijektive Funktion, auch invertierbare Funktion genannt, die eine Funktion ist, die in beide Richtungen funktioniert und genau ein Element aus einer Menge mit genau einem Element von paart der andere Satz:

So erstellen Sie eine bidirektionale Karte in JavaScript

Kredit: Bijektion

Vor diesem Hintergrund können wir wissen, dass eine bijektive Funktion für die obigen Mengen Folgendes erzeugt:

f (1) = D
f (C) = 3

Eine andere Sache, die sich aus der Bijektivfunktion ergibt, ist, dass die Mengen genau die gleiche Länge haben werden, sonst würde die Bijektion scheitern.

Initialisieren Sie die bidirektionale Karte

Wir werden dies mit einer JavaScript -Klasse modellieren, die mit einem Objekt aus Schlüssel-Wert-Paaren initialisiert wird:

const bimap = new BidirectionalMap({ a: 'A', b: 'B', c: 'C', })

Intern erstellen wir zwei Listen. Eine Liste speichert die Liste der Paare einer so genannten Vorwärtskarte, in der der Schlüssel dem Wert zugeordnet wird und eine Kopie des Objekts ist, das wir zum Initialisieren der bidirektionalen Karte verwendet haben. Die zweite Liste ist das, was wir eine umgekehrte Zuordnung nennen, und speichert eine Version des Objekts, das zum Initialisieren der bidirektionalen Zuordnung verwendet wird, wobei die Schlüssel-Wert-Paare umgedreht wurden und der „Wert” jetzt dem „Schlüssel” zugeordnet ist:

Beachten Sie, dass Sie aufgrund der Art des Objekts, das die bidirektionale Karte initialisiert, keine Zahl für den Schlüssel verwenden können, aber Sie können ihn immer noch als Wert verwenden und Sie können später danach abfragen:

const bimap = new BidirectionalMap({ a: 42, b: 'B', c: 'C', })

Eine robustere, aber auch komplexere Version könnte mit dem Map-Datentyp von JavaScript geschrieben werden und Schlüssel zulassen, die Zahlen, Funktionen oder sogar NaN sind.

Holen Sie sich ein Element aus einer bidirektionalen Karte

Bis zu diesem Punkt haben wir eine Datenstruktur, die zwei Objekte hostet, von denen eines in Bezug auf Schlüsselwerte ein Spiegel des anderen ist. Wir brauchen jetzt eine Methode, um etwas daraus zu machen. Lassen Sie uns eine get()Funktion implementieren:

get( key) { return this.fwdMap[key] || this.revMap[key] }

Es ist sehr einfach: Wenn es in der Vorwärtsabbildung vorhanden ist, geben wir es zurück, andernfalls geben wir es von der umgekehrten Abbildung zurück. Wenn keine vorhanden ist, undefinedwird zurückgegeben.

Wir können jetzt einige Elemente erhalten wie:

console.log( bimap.get('a')) console.log( bimap.get('A'))

Fügen Sie einer bidirektionalen Karte ein Element hinzu

Unsere Karte hat derzeit keine Möglichkeit, weitere Elemente hinzuzufügen, also fügen wir eine Funktion hinzu, um der Karte neue Elemente hinzuzufügen:

add( pair) { this.fwdMap[pair[0]] = pair[1] this.revMap[pair[1]] = pair[0] }

Dieser erhält ein Array aus zwei Elementen, die wir später als Tupel mit TypeScript eingeben und als Schlüssel – Werte in beide Richtungen den entsprechenden Objekten zuweisen.

Und jetzt können wir ein Paar hinzufügen und dieses neue Paar abfragen

bimap.add(['d', 'D']) console.log( bimap.get('D'))

Eine typsichere bidirektionale Zuordnung in TypeScript

Um die Dinge besser und sicherer zu machen, können wir dies in TypeScript umschreiben und Eingabekonzepte wie ein generisches Objekt beim Initialisieren der Karte und ein Tupel beim Hinzufügen eines neuen Elements hinzufügen.

Diese Eingabe macht unsere Karte jetzt absolut sicher und stellt sicher, dass wir in diesem Fall immer Zeichenfolgen für Schlüssel und Werte verwenden.

Aufnahmequelle: startfunction.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen