• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Dwustronny słownik

Object Storage Arubacloud
+3 głosów
321 wizyt
pytanie zadane 12 czerwca 2021 w JavaScript przez MsMaciek123 Pasjonat (24,760 p.)
zamknięte 13 czerwca 2021 przez MsMaciek123

Cześć, szukam jakiejś struktury, która pozwoliłaby mi wyciągnąć wartość na podstawie klucza i odwrotnie.

Załóżmy że robię stronę, w której każdy użytkownik może wybrać kilka liczb od 1 do 1 000 000.

Muszę te liczby zapisać, więc użyłbym do tego słownika:

{
    idUzytkownika: [wybrane liczby]
}

No i jest ok, dopóki nie będę chciał uzyskać listy użytkowników, którzy wzięli np. liczbę 3. Do tego, muszę stworzyć jeszcze jeden słownik

{
   0: [użytkownicy, którzy wybrali 0],
    1: [użytkownicy, którzy wybrali 1]
itd..
}

I teraz pytanie, czy to jest najlepsze rozwiązanie? Myślałem jeszcze nad tym np. chcąc uzyskać listę użytkowników, którzy wybrali liczbę 3, to mógłbym iterować się po każdym z nich i sprawdzać czy nie ma w tej tablicy liczby 3, no ale dla biliona użytkowników to tak średnio to zadziała :/

komentarz zamknięcia: Uzyskałem odpowiedź, użyję dwóch słowników (+ baza danych)
komentarz 12 czerwca 2021 przez tkz Nałogowiec (42,000 p.)
Wolna myśl. Wygląda mi to na relacje w bazie danych. Może coś w ten deseń? Żeby też nie było, nie znam javascriptu, może istnieje coś wbudowanego.
komentarz 12 czerwca 2021 przez MsMaciek123 Pasjonat (24,760 p.)
Myślałem nad bazami danych, ale wciąż muszę albo trzymać te dane dwukrotnie, albo przeiterować się po wszystkich danych, żeby uzyskać użytkowników z liczbą 3.

Co do języka, myślę, że może być to w dowolnym, to sobie poszukam alternatywy czy coś

2 odpowiedzi

+3 głosów
odpowiedź 12 czerwca 2021 przez rafal.budzis Szeryf (85,260 p.)
wybrane 13 czerwca 2021 przez MsMaciek123
 
Najlepsza

Jest wiele sposobów na przetrzymywanie danych. Zaproponowana przez Ciebie redundancja ma sens gdy zadbasz o spójność danych w obydwu strukturach. Innym sposobem było by stworzenie tablicy tablic coś na kształt tego : 

const data = [
    [userId, number],
    [userId, number],
    [userId, number],
    [userId, number]
]

Dzięki tablicy możesz dane posortować i zapewnić sobie szybszy dostęp do danych iterując tylko po małej części. Jednak czy ma to sens? Raczej średnio ponieważ będziesz implementował wiele różnych rozwiązań które bazy danych zapewnią Ci w standardzie. Myślę że rozsądnie postawić sobie jakiegoś MySQLa i tyle. Liczenie tego na piechotę może okazać się nie praktyczne.

Drugi problem to przed wczesna optymalizacja. Zakładasz że będzie wolno działać przy bilionie userów. Optymalizacji powinna być raczej szukaniem złotego środka miedzy nakładem pracy a efektem. Dopóki nie masz tylu userów nie warto się tym tak mocno przejmować ;) 

Jeśli z jakiegoś powodu nie możesz skorzystać z bazy danych w swojej aplikacji przybliż cel działania aplikacji. Łatwiej będzie dobrać inne rozwiązanie. 

+2 głosów
odpowiedź 13 czerwca 2021 przez mordimer Mądrala (5,720 p.)
Zakładając ze gdzies te dane musisz zapisać to użyj poprostu dowolnego relacyjengo silnika bazodanowego i relacja many to many (jeden uses moze mieć wiele liczb a wiele liczb moze należeć do wielu userow) jest tym czego szukasz. Tutaj https://fmhelp.filemaker.com/help/18/fmp/en/index.html#page/FMP_Help/many-to-many-relationships.html Masz przyklad takiej relacji. Ale przedstaw może szerzej co chcesz osiągnąć to cos innego moze wykmininy

Podobne pytania

0 głosów
2 odpowiedzi 360 wizyt
pytanie zadane 29 listopada 2020 w PHP przez Igorek Mądrala (6,290 p.)
0 głosów
2 odpowiedzi 328 wizyt

92,661 zapytań

141,557 odpowiedzi

319,999 komentarzy

62,028 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...