Tablica (informatyka)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 popularnych językach programowaniaC/C++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[6];
int tablica2[6][6]; //tablica dwuwymiarowa
int tablica3[7][7][7]; //tablica trójwymiarowa
Przy deklaracji wielkości tablicy użyte mogą zostać tylko liczby naturalne (bez zera). C#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[6]; // jednowymiarowa tablica 6 liczb całkowitych
int[,] tablica2 = new int[6,6]; //tablica dwuwymiarowa
int[,,] tablica3 = new int[7,7,7]; //tablica trójwymiarowa
// tablica nieregularna
int[][] tablicaX = new int[3][]; // jednowymiarowa tablica na trzy różne jednowymiarowe tablice
Objective-CTablice 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 = @[@1, @2, @3, @4, @5, @6];
// Tablica zmienna
NSMutableArray *tablicaZmienna = [NSMutableArray arrayWithObjects:@1, @2, nil];
[tablicaZmienna addObject:@3];
// Tablica obiektów
NSArray *array = [[NSArray alloc] initWithObjects:@"wikipedia", @"wikicytaty", @"commons", nil];
// Dostęp do elementów i liczba elementów
NSLog(@"Pod 1: %@ \n", [array objectAtIndex:1]); # "Pod 1: wikicytaty"
NSLog(@"Licznik: %d \n", [array count]); # "Licznik: 3"
Tablice znane z języka C[9]: int arr[5] = {10, 20, 30, 40, 50};
NSLog(@"Pod 0: %d \n", arr[i]); # "Pod 0: 10"
JavaTablice 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[6]; // deklaracja tablicy liczb całkowitych z jednoczesną alokacją na 6 elementów
JavaScriptZarówno w standardzie JS jak i w TypeScript tablice tworzy się następująco: var tablica = [1, 2, 3];
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 = [1,2,3];
tablica[4] = 5;
jest równoważne var tablica = [1,2,3,undefined,5];
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. PythonWbudowane 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 = [1, 2, 3, 4, 5, 6]
# 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[0]) # -> 1
# Tablica znaków unicode
# ("f" jak float, albo "d" jak double)
tablica_double = array.array('d', [1.0, 2.1, 3.2, 4.3])
print(tablica_double[0]) # -> 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]. PHPTablice 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 = [1, 2, 3, 4, 5, 6];
// Tablica asocjacyjna
$tablica_asocjacyjna = array("klucz1" => "wartość1", "klucz2" => "wartość2");
// ...albo
$tablica_asocjacyjna = ["klucz1" => "wartość1", "klucz2" => "wartość2"];
// Tablica wielowymiarowa
$tablica2d = [
[1, 2],
[3, 4],
];
$tablica3d = [
[[1, 2],[3, 4],],
[[5, 6],[7, 8],],
];
var_export($tablica3d[0][0]);
/*
wynik: array (
0 => 1,
1 => 2,
)
*/
Tablice w PHP mogą działać zarówno jako listy, jak i słowniki. RTablice 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,1]) # 1
print(macierz_kolumny[2,1]) # 2
print(macierz_kolumny[1,2]) # 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,1]) # 1
print(macierz_wiersze[1,2]) # 2
print(macierz_wiersze[1,3]) # 3
print(macierz_wiersze[2,1]) # 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 RustTablice w Rust mają statyczny rozmiar określony w czasie kompilacji. Indeksowanie zaczyna się od zera[18]. // Tablica jednowymiarowa
let tablica: [i32; 6] = [1, 2, 3, 4, 5, 6];
// Tablica dwuwymiarowa
let tablica2d: [[i32; 2]; 3] = [[1, 2], [3, 4], [5, 6]];
Zobacz teżPrzypisy
Bibliografia
|