Saya mencoba mencari solusi yang baik (dan cepat) untuk masalah berikut:
Saya memiliki dua model yang saya kerjakan, sebut saja mereka pemain dan tim. Seorang pemain dapat berada di beberapa tim dan sebuah tim dapat memiliki beberapa pemain). Saya sedang berupaya membuat elemen UI pada formulir yang memungkinkan pengguna memilih beberapa tim (kotak centang). Karena pengguna memilih (atau membatalkan pilihan) tim, saya ingin menampilkan tim yang dikelompokkan berdasarkan pemain.
Jadi untuk contoh:
Jika tim yang dipilih tidak memiliki pemain yang berpotongan, masing-masing tim akan memiliki bagian sendiri.
Jika pengguna memilih dua tim dan mereka memiliki pemain yang sama, akan ada satu bagian yang berisi nama-nama kedua tim dan semua pemain.
Jika TEAM_A memiliki pemain [1, 2, 4, 5] dan TEAM_B memiliki pemain [1, 3, 5, 6]. Akan ada bagian berikut: SECTION_X = [TEAM_A, TEAM_B, 1, 5], SECTION_Y = [TEAM_A, 2, 3], SECTION _Z = [TEAM_B, 3, 5]
Saya harap itu jelas. Pada dasarnya, saya ingin menemukan tim yang memiliki kesamaan pemain dan kelompok dengan itu. Saya berpikir mungkin ada cara untuk melakukan ini dengan menavigasi grafik bipartit? Tidak begitu yakin bagaimana dan saya mungkin terlalu memikirkannya. Saya berharap untuk melakukan ini dengan membuat beberapa jenis struktur data di server dan menggunakannya pada klien. Saya ingin mendengar saran Anda dan saya menghargai segala bantuan yang dapat Anda berikan!
Team
harus memiliki bidang yang disebutplayers
yang memerlukan hubungan banyak-ke-banyak dengan model Anda yang lainPlayer
. Ini memungkinkan Anda untuk mengambil pemain yang ada di setiap tim dan tim mana yang dikaitkan dengan masing-masing pemain.Jawaban:
Pernahkah Anda mendengar tentang grafik persimpangan ? Anda dapat mencoba menggambar pemain sebagai poin, koneksi (rekan tim) sebagai ujung dan tim sebagai gumpalan berwarna transparan di atas.
Mengenai pertanyaan awal Anda, saya tidak dapat memahami tujuan Anda. Saya pikir formulasi Anda tidak didefinisikan dengan baik / tidak lengkap. Misalkan Anda memiliki tim A [1,2] B [2,3] dan C [1,3]. Apa yang ingin Anda tampilkan? Apakah Anda ingin membuat daftar bagian-bagian diagram Venn? Saya pikir untuk lebih dari 3 set ini bisa menjadi lebih rumit daripada grafik bipartit itu sendiri = daftar sederhana komposisi tim.
sumber
Simpan tepi (hubungan) di server Anda:
Saat Anda ingin menemukan elemen umum, cukup filter semua tepi tempat:
(Anda dapat menggunakan indeks untuk mempercepat, dll)
Kemudian kelompokkan dengan ID pemain dan periksa berapa banyak item dalam setiap kelompok. Grup dengan dua item milik kedua tim dan dibagikan.
sumber