Массив ячеек - это тип данных с индексированными контейнерами данных, называемыми ячейками, где каждая ячейка может содержать любой тип данных
В Julia массивы могут содержать значения однородного ([1, 2, 3]
) или разнородного типов ([1, 2.5, "3"]
). Юлия по умолчанию попытается перевести значения в общий конкретный тип. Если Джулия не может продвигать содержащиеся типы, результирующий массив будет иметь абстрактный тип Any
.
Пример перенесен из Доступ к данным в массиве ячеек , с использованием Julia 1.0.3:
julia> C = ["one" "two" "three"; # Matrix literal
1 2 3 ]
2×3 Array{Any,2}:
"one" "two" "three"
1 2 3
julia> upperLeft = C[1:2,1:2] # slicing
2×2 Array{Any,2}:
"one" "two"
1 2
julia> C[1,1:3] = ["first","second","third"] # slice assignment
3-element Array{String,1}:
"first"
"second"
"third"
julia> C
2×3 Array{Any,2}:
"first" "second" "third"
1 2 3
julia> numericCells = C[2,1:3]
3-element Array{Any,1}:
1
2
3
julia> last = C[2,3] # indexing
3
julia> C[2,3] = 300 # indexing assignment
300
julia> C
2×3 Array{Any,2}:
"first" "second" "third"
1 2 300
julia> r1c1, r2c1, r1c2, r2c2 = C[1:2,1:2] # destructuring
2×2 Array{Any,2}:
"first" "second"
1 2
julia> r1c1
"first"
julia> r2c1
1
julia> r1c2
"second"
julia> r2c2
2
julia> nums = C[2,:]
3-element Array{Any,1}:
1
2
300
Пример перенесен из Объединение ячеистых массивов с не ячейками :
Обратите внимание на использование оператора splice (...
) для включения значений внутреннего массива во внешний и использование синтаксиса Any[]
для предотвращения продвижения Джулией UInt8
до Int
.
julia> A = [100, Any[UInt8(200), 300]..., "Julia"]
4-element Array{Any,1}:
100
0xc8
300
"Julia"
Синтаксис вещания .(
, применяет функцию typeof
поэлементно.
julia> typeof.(A)
4-element Array{DataType,1}:
Int64
UInt8
Int64
String
Таким образом, в итоге Юлии не нужны массивы ячеек, вместо этого она использует параметрические n-мерные массивы. Также Юлия использует только скобки для нарезки и индексации (A[n]
, A[i, j]
, A[a:b, x:y]
), скобки после того, как символ переменной зарезервирован для вызовов функций (foo()
, foo(args...)
, foo(bar = "baz")
).