W tym artykule zajmiemy się tematem Tablica (informatyka), który zyskał duże znaczenie w różnych obszarach. Tablica (informatyka) to temat, który wzbudził zainteresowanie specjalistów i ogółu społeczeństwa, wywołując debatę i dyskusję na temat jego implikacji i konsekwencji. Na przestrzeni lat Tablica (informatyka) ewoluował i nabył nowe aspekty, które wymagają dogłębnej analizy. Dlatego niezwykle ważne jest dokładne zrozumienie wszystkich aspektów związanych z Tablica (informatyka), a w tym artykule zagłębimy się w jego znaczenie, wpływ na społeczeństwo i możliwe alternatywy, aby skutecznie sobie z tym poradzić.
Tablica – kontener uporządkowanych danych[1] zazwyczaj takiego samego typu[2][3], w którym poszczególne elementy dostępne są za pomocą indeksów[1][3]. Tablice jednowymiarowe mogą przechowywać inne tablice, dzięki czemu uzyskuje się tablice wielowymiarowe[1][4]. W tablicach wielowymiarowych poszczególne elementy są adresowane przez ciąg indeksów[3].
W matematyce odpowiednikiem tablicy jednowymiarowej jest ciąg, a tablicy dwuwymiarowej – macierz.
Indeks może być numeryczny i w różnych językach może mieć numerację od 0 (np. w C), albo od 1 (np. w R). Indeksy mogą być również nazwane i wówczas mówimy o tablicy asocjacyjnej. Rozmiar tablicy jest albo ustalony z góry (tablice statyczne), albo może się zmieniać w trakcie wykonywania programu (tablice dynamiczne). Wiele języków programowania obsługuje tablice, choć w wypadku część z nich granica między statyczną tablicą a dynamiczną listą jest rozmyta.
Tablice w C/C++ są typem pochodnym[2] obiektów, które zajmują ciągły obszar pamięci[2]. Indeksowanie elementów zawsze zaczyna się od zera[2].
/* jednowymiarowa tablica 6 liczb całkowitych */
int tablica;
int tablica2; //tablica dwuwymiarowa
int tablica3; //tablica trójwymiarowa
Przy deklaracji wielkości tablicy użyte mogą zostać tylko liczby naturalne (bez zera).
Tablice w C# są obiektami[5]. Wyróżnia się tablice jednowymiarowe, wielowymiarowe i nieregularne (poszarpane) czyli tablice tablic[6]. Indeksowanie tablic zawsze zaczyna się od zera[6]. Dopuszczalne są tablice bezelementowe[7].
int tablica = new int; // jednowymiarowa tablica 6 liczb całkowitych
int tablica2 = new int; //tablica dwuwymiarowa
int tablica3 = new int; //tablica trójwymiarowa
// tablica nieregularna
int tablicaX = new int; // jednowymiarowa tablica na trzy różne jednowymiarowe tablice
Tablice w Objective-C są reprezentowane przez klasy NSArray i NSMutableArray, obsługujące dynamiczne rozmiary, ale można również użyć prostszych tablic znanych z języka C. Indeksowanie rozpoczyna się od zera[8].
// Tablica niezmienna
NSArray *tablica = @;
// Tablica zmienna
NSMutableArray *tablicaZmienna = ;
;
// Tablica obiektów
NSArray *array = initWithObjects:@"wikipedia", @"wikicytaty", @"commons", nil];
// Dostęp do elementów i liczba elementów
NSLog(@"Pod 1: %@ \n", ); # "Pod 1: wikicytaty"
NSLog(@"Licznik: %d \n", ); # "Licznik: 3"
Tablice znane z języka C[9]:
int arr = {10, 20, 30, 40, 50};
NSLog(@"Pod 0: %d \n", arr); # "Pod 0: 10"
Tablice w Javie są obiektami[10]. Można zdefiniować tylko tablice jednowymiarowe[10]. Tablice wielowymiarowe można symulować przez definiowanie tablicy tablic[10]. Indeksowanie tablic zawsze zaczyna się od zera[10].
int tablica = new int; // deklaracja tablicy liczb całkowitych z jednoczesną alokacją na 6 elementów
Zarówno w standardzie JS jak i w TypeScript tablice tworzy się następująco:
var tablica = ;
var tablicaPusta = ;
lub
var tablica = new Array(1,2,3);
var tablicaPusta = new Array();
Tablice w JavaScripcie są dynamiczne, co oznacza, że nie trzeba deklarować ich wielkości. Tablica powiększa się automatycznie.
var tablica = ;
tablica = 5;
jest równoważne
var tablica = ;
Tablice nie są osobnym typem danych w języku JavaScript. Mają osobną składnie deklaracji, ale są to obiekty, których kluczami są indeksy (zamieniane na ciągi znaków). Obiekty te posiadają specjalną właściwość length. W nowej odsłonie języka (ES6/ES2015) tablice są także iteratorami.
Wbudowane tablice w Pythonie mogą być tworzone za pomocą moduły array i mogą przechować elementy jednego rodzaju na raz. Indeksowanie rozpoczyna się od zera[11][12].
# Dołączenie wbudowanego modułu do obsługi tablic
import array as array
# Lista jednowymiarowa jako źródło danych tablicy
lista =
# Tablica
# ("l" jak long, możliwe także "L" unsigned long; przynajmniej 4 bajty)
# (również oraz "i"/"I" dla intiger; przynajmniej 2 bajty)
tablica_long = array.array('l', lista)
# Indeksowanie
print(tablica_long) # -> 1
# Tablica znaków unicode
# ("f" jak float, albo "d" jak double)
tablica_double = array.array('d', )
print(tablica_double) # -> 1.0
# Wielkość elementów tablicy
print(tablica_txt.itemsize) # -> 2
print(tablica_double.itemsize) # -> 8
Same listy w Pythonie są bardziej elastyczne jako że mogą przechowywać mieszane typy danych, wspierają więcej typów danych i mogą być wielowymiarowe[11][13]. Choć listy nie są sensu stricte tablicami, to mają cechy tablic i są podobne do tablic z innych języków (np. PHP czy JavaScript)[14].
Tablice w PHP są elastycznymi strukturami danych mogącymi przechowywać wartości różnych typów, czyli bardziej przypominają listy z Pythona niż tablice z C. Indeksowanie domyślnie rozpoczyna się od zera[14][15].
// Tablica jednowymiarowa
$tablica = array(1, 2, 3, 4, 5, 6);
// ...albo
$tablica = ;
// Tablica asocjacyjna
$tablica_asocjacyjna = array("klucz1" => "wartość1", "klucz2" => "wartość2");
// ...albo
$tablica_asocjacyjna = ;
// Tablica wielowymiarowa
$tablica2d = [
,
,
];
$tablica3d = [
,,],
,,],
];
var_export($tablica3d);
/*
wynik: array (
0 => 1,
1 => 2,
)
*/
Tablice w PHP mogą działać zarówno jako listy, jak i słowniki.
Tablice w R są tworzone jako macierze lub struktury tablicowe o dowolnej liczbie wymiarów. Indeksowanie rozpoczyna się od jednego[16][17].
# Tablica jednowymiarowa (wektor)
tablica <- c(1, 2, 3, 4, 5, 6)
# Tablica dwuwymiarowa (macierz)
macierz_kolumny <- matrix(tablica, nrow = 2, ncol = 3)
print(macierz_kolumny) # 1
print(macierz_kolumny) # 2
print(macierz_kolumny) # 3
# Ułożenie danych w wierszach (zamiast domyślnego ułożenia w kolumnach)
macierz_wiersze <- matrix(tablica, nrow = 2, ncol = 3, byrow = TRUE)
print(macierz_wiersze) # 1
print(macierz_wiersze) # 2
print(macierz_wiersze) # 3
print(macierz_wiersze) # 4
# Tablica trójwymiarowa
dane1d <- c(1, 2, 3, 4, 5, 6, 7, 8)
rows = 2
cols = 3
matrix_count = 2
row_names <- c("w1", "w2")
col_names <- c("k1", "k2", "k3")
mat_names <- c("Macierz1", "Macierz2")
# the naming of the various elements
# is specified in a list and
# fed to the function
tablica3d = array(dane1d, dim = c(rows, cols, matrix_count),
dimnames = list(row_names, col_names, mat_names)
)
print (tablica3d)
Efektem tego ostatniego będzie coś w rodzaju:
,,Macierz1 k1 k2 k3 w1 1 3 5 w2 2 4 6 ,,Macierz2 k1 k2 k3 w1 7 1 3 w2 8 2 4
Tablice w Rust mają statyczny rozmiar określony w czasie kompilacji. Indeksowanie zaczyna się od zera[18].
// Tablica jednowymiarowa
let tablica: = ;
// Tablica dwuwymiarowa
let tablica2d: ; 3] = , , ];