Nadal jestem całkiem nowy dla C#, ale zauważyłem zalety poprzez posty na forum stosowania HashSet
zamiast List
w szczególnych przypadkach.Jaka jest najszybsza/najbezpieczniejsza metoda do iteracji w HashSet?
Moja obecna sprawa nie polega na tym, że przechowuję olbrzymią ilość danych w pojedynczym List
, ale raczej niż często muszę sprawdzać, czy są to członkowie.
Połów jest taki, że muszę go również powtórzyć, ale kolejność, w jakiej są przechowywane lub pobierane, nie ma znaczenia.
Czytałem, że każda pętla jest wolniejsza niż w następnej, więc jak inaczej mogę to zrobić w najszybszym możliwym sposobie?
Liczba sprawdzeń, które robię, zdecydowanie szkodzi mojej skuteczności z listami, więc przynajmniej w porównaniu z wydajnością HashSet
byłaby przydatna.
Edycja: aktualnie używam list, iteruję przez nie w wielu lokalizacjach, a inny kod jest wykonywany w każdej lokalizacji. Najczęściej aktualne listy zawierają współrzędne punktowe, które następnie wykorzystuję w odniesieniu do dwuwymiarowej tablicy, a następnie wykonuję operację lub inną na podstawie kryteriów listy.
Jeśli nie ma bezpośredniej odpowiedzi na moje pytanie, jest to w porządku, ale założyłem, że mogą istnieć inne metody iterowania w cyklu HashSet
niż po prostu foreach
. W tej chwili nie rozumiem, jakie mogą być inne metody, jakie są ich zalety, itd. Zakładając istnienie innych metod, założyłem również, że istnieje typowa preferowana metoda wyboru, która jest ignorowana tylko wtedy, gdy nie zaspokaja potrzeb (moje potrzeby są dość proste).
Jeśli chodzi o przedwczesną optymalizację, wiem już, że używanie list jest wąskim gardłem. Jak pomóc w rozwiązaniu tego problemu, to gdzie utknąłem. Nawet nie utknąłem dokładnie, ale nie chciałem ponownie wymyślać koła, testując wielokrotnie tylko po to, aby przekonać się, że robię to w najlepszy możliwy sposób (jest to duży projekt z ponad 3-miesięczną inwestycją, listy są wszędzie , ale są zdecydowanie takie, że nie chcę duplikatów, mam dużo danych, nie trzeba ich przechowywać w określonej kolejności itp.).
Co zamierzasz zrobić w iteracji? Wykonywać kod? Policz coś? –
Przedwcześnie optymalizujesz. Nie oznacza to, że powinieneś całkowicie zignorować implikacje wydajności struktur danych i kodu, ale jeśli potrzebujesz semantyki HashSet, następnym krokiem jest profilowanie iteracji w kontekście twojego programu i sposobu, w jaki zwykle będzie to możliwe. biegać. Jeśli iteracja nie jest wąskim gardłem wydajności, a następnie przejść dalej, nie jest warta twojego czasu. Nie zakładajcie, że tak będzie, przetestujcie. –
Nie wiem nic na temat odpowiedzi, ale moja konwencja mówi, że najszybsza metoda nie będzie najbezpieczniejsza, a najbezpieczniejsza nie będzie najszybsza. Sądzę, że jeśli jedna metoda jest najszybsza i najbezpieczniejsza, to nie ma potrzeby stosowania innych metod. Mogę się mylić. – nawfal