Non-zero based arrays

W większości języków programowania tablice są indeksowane od zera. Również w c# jest tak samo. Jednak twórcy języka pozwalają nam stworzyć tablicę, w której to sami definiujemy indeks początkowy.

Klasa Array

Jeśli chcemy zdefiniować indeks początkowy różny od zera, to przychodzi nam z pomocą klasa Array wraz z metodą CreateInstance.

Metoda przyjmuje następujące parametry:

  • Typ elementów tablicy.
  • Tablicę długości każdego z wymiarów. Jeśli chcemy stworzyć tablicę jednowymiarową z 10 elementami, to podjemy tablicę z jednym elementem równym 10. Jeśli chcemy stworzyć tablicę dwuwymiarową, gdzie pierwszy wymiar ma 11 elementów, a drugi 12, to musimy przekazać tablicę z elementami 11 i 12.
  • Tablicę indeksów startowych dla każdego z wymiarów. Jeśli tworzymy tablicę jednowymiarową i chcemy by indeksem startowym było 10, to podajemy tablicę z jednym elementem równym 10.

Ustawianie wartości

Niestety nie mamy dostępu do elementów tablicy poprzez nawiasy kwadratowe, więc musimy korzystać z metody SetValue. Pierwszym parametrem jest wartość jaką chcemy przypisać do danego indeksu, a drugim indeks. Jednak co ważne, trzeba pamiętać o przesunięciu indeksu startowego i trzeba to uwzględnić w tej metodzie.

Pobieranie wartości

Również do pobrania wartości, która „kryje” się pod danym indeksem musimy skorzystać z metody – GetValue. Tutaj również musimy pamiętać o przesunięciu indeksu startowego. Ponadto metoda zwraca wartość jako object.

Porównanie z normalną tablicą

Wykonałem kilka prostych testów, aby pokazać czy używanie tablic tworzonych za pomocą klasy Array niesie ze sobą jakieś konsekwencje wydajnościowe.

Sprawdzam kilka rzeczy:

  • tworzenie tablicy
  • przypisywanie wartości indeksom
  • iterowanie przy pomocy foreach
  • odczyt wartości z indeksu

Testy wykonałem na tablicach, które mają po 1000 elementów.

Przechwytywanie
Wyniki w ms

Jak widać po wynikach, normalna tablica jest szybsza, około dwóch-trzech razy, pomijając same tworzenie.

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Connecting to %s