W Dictionary<struct,int>
: czy jest możliwe Dodać/Ustawić w jednym wywołaniu?C# Słownik Dodaj/Ustaw w jednym wywołaniu ze względu na wydajność
Czy można wykonać poniższy kod tylko w jednym wyszukiwaniu w odniesieniu do wpisu?
_KeyToPoints = new Dictionary<Key,int>();
foreach (var entry in billionEntries)
{
int originalValue;
// first lookup
_KeyToPoints.TryGetValue(entry.Key, out originalValue);
// second lookup
_KeyToPoints[key] = originalValue + points;
}
Odbywa się to w bardzo ciasnej pętli nad ogromną ilością danych, więc wszystkie działania mają znaczenie.
A może jest lepsza odpowiednia struktura danych?
Nie sądzę, że możesz uniknąć konieczności indeksowania w słowniku dwukrotnie (raz, aby uzyskać istniejącą wartość, i ponownie aby ustawić wartość), ale możesz pominąć ustawienie wartości originalValue na 0, ponieważ TryGetValue zrobi to za ciebie, jeśli klucz nie zostanie znaleziony. I musisz mieć check in przypadku TryGetValue zwraca false. – SlimsGhost
Czy występuje problem z wydajnością _actual_ w stosunku do całego procesu lub czy tylko chcesz go mieć? Wyszukiwanie słownika to O (1), więc nie powinno być zbyt mało wysiłku związanego z wydajnością przy wyszukiwaniu (i zestawie o to chodzi) –
@ SlimsGhost Nie musisz sprawdzać wyniku w tym przypadku - jeśli klucz nie istniał '_KeyToPoints [key]' przechowuje '0 + punktów' w tej pozycji klucza. Kod byłby taki sam, niezależnie od tego, czy klucz istnieje, czy nie. –