As a great tool for numerical and scientific computing, Julia has quite modern design and abundant methods for arrays.
Above all, I need to mention the method names()
for showing names exported in a module. It is quite useful for me. Below is an example about obtaining names exported by Core module. (I miss still dir()
method in Python).
# Get an array of the names exported by Module Core
ns = names(Core)
println(ns)
As seen in the output shown above, there is an AbstractArray type in this Core module. I cite from the official documentation: AbstractArray{T,N}
is Supertype for N-dimensional arrays (or array-like types) with elements of type T
. Array and other types are subtypes of this.
Base.AbstractVector: AbstractVector{T}
== AbstractArray{T,1}
.
Base.AbstractMatrix: AbstractMatrix{T}
== AbstractArray{T,2}
.
Array{T,N}
is derived from type AbstractArray{T,N}
, which defines N-dimensional dense array with elements of type T.
Undef
: Alias for UndefInitializer()
, which constructs an instance of the singleton type UndefInitializer, used in array initialization to indicate the array-constructor-caller would like an uninitialized array.
Here are my tests:
# same as in Python
a = [1, 2, 4, 8] ## Type shall be Array{Int64,1}
println("a: ", a, ", size:", size(a)) # get size
println("a: ", a, ", length:", length(a)) # get length
### ATTENTION: first element's index is 1, not 0
println("a[1]: ", a[1]) # a[1] => 1
println("a[3]: ", a[3]) # a[3] => 4
println("a[end]: ", a[end]) # a[end] => 6
a1 = Array{Int64,1}(undef, 4)
a2 = Array{Int64}(undef, 4)
println(" a and a1 are of same type:", typeof(a) == typeof(a1))
println(" a and a2 are of same type:", typeof(a) == typeof(a2))
# Empty array with datatype
b = Int64[] # similar to C#
println("b:", b, ", size: ", size(b))
# Array with two elements
c = Int16[12, 34] # attention, here 12 and 34 inside the brackets are not dimensions, they are elements of the array
println("c:", c, ", size: ", size(c))
# 2-dimension matrix
matrix22 = [11 22; 33 44] # => 2x2 matrix of type Int64: [1 2; 3 4]
println("matrix22: ", matrix22, ", size: ", size(matrix22))
println("matrix22: ", matrix22, ", length:", length(matrix22)) # get length
matrix = Array{Int64,2}(undef, 2, 2)
println(" matrix22 and matrix are of same type:", typeof(matrix22) == typeof(matrix))
# Use push! and append! to add elements to an array
# Use pop! to remove the last element of an array
## method ending with ! means that this method modifies the input argument
e = [1,3,5,7]
push!(e,9) # => [1,3,5,7,9]
println("e:", e, ", size: ", size(e))
push!(e,11) # => [1,3,5,7,9,11]
println("e:", e, ", size: ", size(e))
pop!(e) # => [1,3,5,7,9] with 11 been removed
println("e:", e, ", size: ", size(e))
## append can concatenate an array to another
append!(e,[15,17,19]) # => [1,3,5,7,9,15,17,19]
println("e:", e, ", size: ", size(e))
println(" ")
# pushfirst! and popfirst!
f = [1,2,3,4,5,6]
popfirst!(f) # => pops the first element 1, a changed to [2,3,4,5,6]
println("f:", f, ", size: ", size(f))
pushfirst!(f,5) # => push 5 in the first place of the array: [5,2,3,4,5,6]
println("f:", f, ", size: ", size(f))
## sort and sort!
prices = [7,4,6,9,3]
s1 = sort(prices) # s1 is a new array sorted in incremental order; prices is still [7,4,6,9,3]
println("s1:", s1, ", prices: ", prices)
s2 = sort!(prices) # s2 and prices are both sorted in incremental order
println("s2:", s2, ", prices: ", prices)
println(" ")
# using ranging to initialize an array
g = collect(1:5) # => 5-element Int64 Array: [1,2,3,4,5]
# partial reading of an array
g1 = g[1:3] # => [1, 2, 3]
g2 = g[2:end] # => [2, 3, 4, 5]
println("g1:", g1, ", g2: ", g2)
# splice!
h = [3,4,5]
h1 = splice!(h,2) # => 4 ; arr updated to [3,5]
println("h1:", h1, ", h: ", h)
# check if 3 exists in array h
i = in(3, h) # => true
println("3 is in array h:", i)
# Exception BoundsError
try
h[0] # => ERROR: BoundsError() in getindex at array.jl:270
h[end+1] # => ERROR: BoundsError() in getindex at array.jl:270
catch e
println(e)
end
Top comments (0)