2016-02-19 4 views
2

Я хочу определить параметры массива кортежей. Я не знаю, сколько кортежей будет в массиве, но я точно знаю, какой тип и сколько предметов будет в каждом кортеже.Укажите количество элементов в кортеже

Я не хочу использовать Vararg, так как нет случайного числа задних элементов. Каждый кортеж содержит точно nFloat64 номеров. n зависит от ввода пользователем.

Как я могу сообщить программе, что каждый кортеж содержит n номеров?

+3

Я думаю, что вы ищете 'Array {NTuple {N, Float64}, 1}' или вы можете использовать число, отличное от 1, если у вас есть более чем 1d-массив этих кортежей. – spencerlyon2

+0

Спасибо @ spencerlyon2! Можете ли вы дать мне ссылку на документацию, пожалуйста? потому что я не мог найти его – Pigna

+0

Но теперь у меня другая проблема: что, если я поместил этот массив в качестве параметра функции? Как указать, что они являются кортежами длины n? Я попытался добавить 'n' в качестве другого параметра:' f (n :: Int8, array: Array {NTuple {Int64 (n), Float64}, 1}) ', но это не сработает. Я получаю: 'LoadError: UndefVarError: n not defined' – Pigna

ответ

2

Spencer является правильным; тип кортежа длиной n записывается как NTuple{n,T}. Вот пример того, как создать массив с этим типом:

julia> n = 4 
4 

julia> A = Array{NTuple{n,Float64},1}(0) 
0-element Array{NTuple{4,Float64},1} 

julia> push!(A, (1,2,3,4)) 
1-element Array{NTuple{4,Float64},1}: 
(1.0,2.0,3.0,4.0) 

julia> NTuple{n,Float64}[(0,0,0,0),(1,1,1,1)] 
2-element Array{NTuple{4,Float64},1}: 
(0.0,0.0,0.0,0.0) 
(1.0,1.0,1.0,1.0) 

В первом случае я использовал push! расти массив постепенно, и во втором случае я явно передается элементы, чтобы инициализировать массив.

Смежные вопросы