Tablica (informatyka)

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ć.

Tablicakontener 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 programowania

C/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;

int tablica2; //tablica dwuwymiarowa
int tablica3; //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; // 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

Objective-C

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"

Java

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

JavaScript

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.

Python

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].

PHP

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.

R

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

Rust

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] = , , ];

Zobacz też

Przypisy

  1. a b c Markowski, Rydzewski i Kruszyński 1989 ↓, s. 74.
  2. a b c d Grębosz 2000 ↓, s. 127.
  3. a b c Marciniak 1991 ↓, s. 111.
  4. Grębosz 2000 ↓, s. 143.
  5. Tablice jako obiekty (Przewodnik programowania w języku C#) , msdn.microsoft.com .
  6. a b Tablice (Przewodnik programowania w języku C#) .
  7. Array.Empty<T> Method () , msdn.microsoft.com (ang.).
  8. NSArray and NSMutableArray in Objective-C , GeeksforGeeks, 10 listopada 2022 (ang.).
  9. Arrays in Objective-C , GeeksforGeeks, 13 marca 2023 (ang.).
  10. a b c d Arrays (The Java™ Tutorials > Learning the Java Language > Language Basics) , docs.oracle.com (ang.).
  11. a b Python Arrays , GeeksforGeeks, 26 grudnia 2018 (ang.).
  12. array — Efficient arrays of numeric values , Python documentation (ang.).
  13. Lists, Built-in Types, Python documentation (ang.).
  14. a b PHP Array Functions , GeeksforGeeks, 18 czerwca 2019 (ang.).
  15. What is the difference between lists and arrays? , GeeksforGeeks, 28 grudnia 2023 (ang.).
  16. R - Matrices , GeeksforGeeks, 29 kwietnia 2020 (ang.).
  17. R - Array , GeeksforGeeks, 28 kwietnia 2020 (ang.).
  18. Rust - Array , GeeksforGeeks, 27 marca 2021 (ang.).

Bibliografia