J'essaie de trouver une bonne (et rapide) solution au problème suivant:
J'ai deux modèles avec lesquels je travaille, appelons-les joueurs et équipes. Un joueur peut appartenir à plusieurs équipes et une équipe peut avoir plusieurs joueurs). Je travaille sur la création d'un élément d'interface utilisateur sur un formulaire qui permet à un utilisateur de sélectionner plusieurs équipes (cases à cocher). Comme l'utilisateur sélectionne (ou désélectionne) des équipes, je voudrais afficher les équipes regroupées par les joueurs.
Donc, pour des exemples:
Si les équipes sélectionnées n'ont pas de joueurs qui se croisent, chaque équipe aurait sa propre section.
Si l'utilisateur sélectionne deux équipes et qu'il a les mêmes joueurs, il y aurait une section contenant les noms des deux équipes et de tous les joueurs.
Si TEAM_A a des joueurs [1, 2, 4, 5] et TEAM_B a des joueurs [1, 3, 5, 6]. Il y aurait les sections suivantes: SECTION_X = [TEAM_A, TEAM_B, 1, 5], SECTION_Y = [TEAM_A, 2, 3], SECTION _Z = [TEAM_B, 3, 5]
J'espère que c'est clair. Essentiellement, je veux trouver les équipes que les joueurs ont en commun et regrouper par là. Je pensais qu'il y avait peut-être un moyen de le faire en naviguant sur un graphique bipartite? Je ne sais pas exactement comment et je pense peut-être trop. J'espérais le faire en créant un certain type de structure de données sur le serveur et en l'utilisant sur le client. J'aimerais entendre vos suggestions et j'apprécie toute aide que vous pouvez apporter!
Team
doit avoir un champ appeléplayers
qui nécessite une relation plusieurs-à-plusieurs avec votre autre modèlePlayer
. Cela vous permet de récupérer les joueurs de chaque équipe et les équipes associées à chaque joueur.Réponses:
Avez-vous entendu parler du graphique d'intersection ? Vous pouvez essayer de dessiner des joueurs comme des points, des connexions (coéquipiers) comme des bords et des équipes comme des taches colorées transparentes sur le dessus.
Quant à votre question initiale, je ne comprends pas votre objectif. Je pense que votre formulation n'est pas bien définie / incomplète. Supposons que vous ayez les équipes A [1,2] B [2,3] et C [1,3]. Que voulez-vous afficher? Voulez-vous répertorier les parties du diagramme de Venn? Je pense que pour plus de 3 sets cela peut devenir plus lourd que le graphe bipartite lui-même = simple listage des compositions des équipes.
la source
Stockez les bords (relations) dans votre serveur:
Lorsque vous souhaitez trouver des éléments communs, il suffit de filtrer toutes les arêtes où:
(Vous pouvez utiliser des index pour accélérer, etc.)
Regroupez ensuite par playerID et vérifiez le nombre d'éléments dans chaque groupe. Les groupes avec deux éléments appartiennent aux deux équipes et sont partagés.
la source