Ich versuche eine gute (und schnelle) Lösung für das folgende Problem zu finden:
Ich habe zwei Modelle, mit denen ich arbeite. Nennen wir sie Spieler und Teams. Ein Spieler kann in mehreren Teams sein und ein Team kann mehrere Spieler haben. Ich arbeite daran, ein UI-Element in einem Formular zu erstellen, mit dem ein Benutzer mehrere Teams auswählen kann (Kontrollkästchen). Da der Benutzer Teams auswählt (oder die Auswahl aufhebt), möchte ich die von den Spielern gruppierten Teams anzeigen.
Also zum Beispiel:
Wenn die ausgewählten Teams keine Spieler haben, die sich überschneiden, hätte jedes Team einen eigenen Abschnitt.
Wenn der Benutzer zwei Teams auswählt und dieselben Spieler hat, gibt es einen Abschnitt, der die Namen der beiden Teams und aller Spieler enthält.
Wenn TEAM_A Spieler [1, 2, 4, 5] und TEAM_B Spieler [1, 3, 5, 6] hat. Es würde die folgenden Abschnitte geben: SECTION_X = [TEAM_A, TEAM_B, 1, 5], SECTION_Y = [TEAM_A, 2, 3], SECTION _Z = [TEAM_B, 3, 5]
Ich hoffe das ist klar. Im Wesentlichen möchte ich die Teams finden, die die Spieler gemeinsam haben, und mich danach gruppieren. Ich dachte, vielleicht gibt es eine Möglichkeit, dies durch Navigieren in einem zweigeteilten Diagramm zu tun? Ich bin mir nicht ganz sicher, wie und ich könnte es überdenken. Ich hatte gehofft, dies zu tun, indem ich eine Art Datenstruktur auf dem Server erstellte und auf dem Client verwendete. Ich würde gerne Ihre Vorschläge hören und freue mich über jede Hilfe, die Sie geben können!
Team
ein Feld mit dem Namen haben sollplayers
, das eine Viele-zu-Viele-Beziehung zu Ihrem anderen Modell erfordertPlayer
. Auf diese Weise können Sie abrufen, welche Spieler in jedem Team sind und welche Teams jedem Spieler zugeordnet sind.Antworten:
Haben Sie von der Schnittgrafik gehört ? Sie können versuchen, Spieler als Punkte, Verbindungen (Teamkollegen) als Kanten und Teams als transparente farbige Blobs oben zu zeichnen.
Was Ihre ursprüngliche Frage betrifft, kann ich Ihr Ziel nicht verstehen. Ich denke, Ihre Formulierung ist nicht gut definiert / unvollständig. Angenommen, Sie haben Teams A [1,2] B [2,3] und C [1,3]. Was möchten Sie anzeigen? Möchten Sie die Teile des Venn-Diagramms auflisten? Ich denke, dass dies für mehr als 3 Sätze umständlicher werden kann als das zweigeteilte Diagramm selbst = einfache Auflistung der Teamzusammensetzungen.
quelle
Speichern Sie die Kanten (Relationen) auf Ihrem Server:
Wenn Sie gemeinsame Elemente finden möchten, filtern Sie einfach alle Kanten, wobei:
(Sie können Indizes verwenden, um die Geschwindigkeit zu erhöhen usw.)
Gruppieren Sie dann nach Spieler-ID und überprüfen Sie, wie viele Elemente sich in jeder Gruppe befinden. Die Gruppen mit zwei Elementen gehören zu beiden Teams und werden gemeinsam genutzt.
quelle