Hvordan lager man tabeller (arrays) i Julia? Den enkleste måten å gjøre det på er rett og slett å liste opp innholdet, akkurat som f.eks. i Python, det vil si [1, 2, 3]. For å lage en tom tabell, bruker man []. Men hva om du vil lage en tabell av en bestemt størrelse? Det er flere muligheter her, men du trenger trolig bare funksjonene beskrevet nedenfor.1

Nullere og enere

Om du trenger en tabell med flyttall, der alle celler er satt til 0.0, kan du bruke zeros, med størrelsen som argument:

julia> zeros(3)
3-element Array{Float64,1}:
 0.0
 0.0
 0.0

Om du kun oppgir en lengde, får du en éndimensjonal tabell (en vektor). Om du vil ha en todimensjonal tabell (en matrise), oppgir du størrelsen langs begge dimensjoner:

julia> zeros(3, 2)
3×2 Array{Float64,2}:
 0.0  0.0
 0.0  0.0
 0.0  0.0

Om du vil angi en bestemt type, kan du oppgi den som første argument. Kanskje du f.eks. vil ha heltall:

julia> zeros(Int, 3, 2)
3×2 Array{Int64,2}:
 0  0
 0  0
 0  0

Om du vil ha 1 heller enn 0, kan du bruke ones i stedet for zeros. Som en snarvei for ones(Bool,…) og zeros(Bool,…) kan du bruke trues(…) og falses(…). Så om du f.eks. vil ha en tom nabomatrise for en graf med n noder, kan du bruke falses(n, n).

Andre verdier

Hvis du trenger noe annet enn 0 og 1 (og evt. varianter som false og true) kan du bruke fill, og oppgi verdien selv. For eksempel:

julia> fill("", 3)
3-element Array{String,1}:
 ""
 ""
 ""

En ting å være oppmerksom på her er om du bruker en modifiserbar (mutable) verdi. Du vil da ikke få kopier av verdien, men flere referanser (pekere) til det samme objektet. For eksempel, la oss si du har følgende kode:

x = []
A = fill(x, 3)
push!(x, "Hei!")

Selv om jeg har endret x etter at jeg laget A, så får vi altså følgende:

julia> A
3-element Array{Array{Any,1},1}:
 ["Hei!"]
 ["Hei!"]
 ["Hei!"]

Ny, lignende tabell

Hvis du alt har en tabell A, og vil lage en ny, uinitialisert tabell med samme form og element-type, kan du bruke similar:

julia> A = [1, 2, 3]
3-element Array{Int64,1}:
 1
 2
 3

julia> B = similar(A)
3-element Array{Int64,1}:
 4440023048
 4404246384
 4395524352

Legg merke til at innholdet i B her er helt vilkårlig. Det er bare det som lå i minnet der hvor B ble allokert. (Hvis du vil kopiere innholdet i A, kan du bruke copy(A).)

Dette kan f.eks. være nyttig i tellesortering (Counting-Sort), for å lage resultattabellen B, basert på inputtabellen A (om man ikke får inn B som argument):

function countingsort(A, k)
    B = similar(A)
    C = zeros(k + 1)
    
end

Husk: Om du vil at C skal oppføre seg som $C[0\mathinner{\ldotp\ldotp}k]$, så må du bruke C[i+1] som implementasjon av $C[i]$.2

Du kan også her (som i flere av disse funksjonene) oppgi en bestemt type, om du vil. F.eks. (med samme A som før):

julia> similar(A, Float64)
3-element Array{Float64,1}:
 2.2711646757e-314
 2.2574932785e-314
 2.2574922034e-314
  1. For en litt grundigere oversikt, se avsnittet Construction and Initialization i dokumentasionen. 

  2. Om du vil ha nullindekserte tabeller, se evt. OffsetArrays. Merk at den pakken ikke nødvendigvis er tilgjengelig i øvingssystemet.