Słowniki (C # lub inne) to po prostu kontener, w którym wyszukujesz wartość na podstawie klucza. W wielu językach jest on bardziej poprawnie identyfikowany jako mapa, a najczęstszą implementacją jest HashMap.
Problemem do rozważenia jest to, co dzieje się, gdy klucz nie istnieje. Niektóre języki zachowują się, zwracając null
lub nil
inną równoważną wartość. Cicha domyślna wartość zamiast informowania, że wartość nie istnieje.
Na dobre lub na złe projektanci bibliotek C # wymyślili idiom, aby poradzić sobie z zachowaniem. Uznali, że domyślnym sposobem wyszukiwania wartości, która nie istnieje, jest zgłoszenie wyjątku. Jeśli chcesz uniknąć wyjątków, możesz użyć Try
wariantu. Jest to to samo podejście, którego używają do parsowania łańcuchów na liczbach całkowitych lub obiektach daty / godziny. Zasadniczo wpływ jest następujący:
T count = int.Parse("12T45"); // throws exception
if (int.TryParse("12T45", out count))
{
// Does not throw exception
}
I to przeszło do słownika, którego indeksator deleguje do Get(index)
:
var myvalue = dict["12345"]; // throws exception
myvalue = dict.Get("12345"); // throws exception
if (dict.TryGet("12345", out myvalue))
{
// Does not throw exception
}
Jest to po prostu sposób zaprojektowania języka.
Czy out
należy odradzać zmienne?
C # nie jest pierwszym językiem, który je ma i mają swój cel w określonych sytuacjach. Jeśli próbujesz zbudować wysoce współbieżny system, nie możesz używać out
zmiennych na granicy współbieżności.
Na wiele sposobów, jeśli istnieje idiom, który jest popierany przez język i głównych dostawców bibliotek, staram się przyjąć te idiomy w moich interfejsach API. Dzięki temu interfejs API wydaje się bardziej spójny w domu w tym języku. Zatem metoda napisana w Ruby nie będzie wyglądać jak metoda napisana w C #, C lub Python. Każdy z nich ma preferowany sposób budowania kodu, a praca z nim pomaga użytkownikom interfejsu API nauczyć się go szybciej.
Czy mapy są ogólnie anty-wzorem?
Mają swój cel, ale wiele razy mogą być złym rozwiązaniem dla twojego celu. Szczególnie, jeśli potrzebujesz mapowania dwukierunkowego, czego potrzebujesz. Istnieje wiele kontenerów i sposobów organizowania danych. Istnieje wiele metod, z których możesz skorzystać, a czasem musisz zastanowić się, zanim wybierzesz ten pojemnik.
Jeśli masz bardzo krótką listę dwukierunkowych wartości mapowania, może być potrzebna tylko lista krotek. Lub listę struktur, w której równie łatwo możesz znaleźć pierwsze dopasowanie po obu stronach mapowania.
Pomyśl o problematycznej dziedzinie i wybierz najbardziej odpowiednie narzędzie do pracy. Jeśli nie ma, utwórz go.