2016-05-21 16 views
1

こんにちは、私はJulia言語でDisctからVectorに変換メソッドを作成しようとしています。私は理解できないと は、しかし、私は、エラーが表示さDictをメソッドJuliaの引数として渡す方法

ERROR: TypeError: Tuple: in parameter, expected Type{T}, got Dict{AbstractString,Int64} 

私のコード

type Family 
    name::UTF8String 
    value::Int 
end 

function convertToVector(a1::Dict{AbstractString, Int64}()) 
       A::Vector{Node} 
      for k in sort(collect(keys(a1))) 
       push!(A, Family(a1[k] , k)) 
       end 
      return A 
     end 

convertToVector方法を変更することが熱い任意のアイデア?

+0

多分ただのタイプミス。それは 'a1 :: Dict {AbstractString、Int64}'ではない 'a1 :: Dict {AbstractString、Int64}()' – Gnimuc

+0

はい、それは仕事ですが、私は別の問題がありますconvertToVectorで定義されていない –

答えて

4

上記のコードでは、いくつかのタイプミスがありましたが、私は、これは動作するはずだと思う:

# No() after the type of a1 
# Also, see comment, better to parameterize function, use concrete type for Dict 
function convertToVector{T<:AbstractString}(a1::Dict{T, Int64}) 
    # This is how you create an empty vector to hold Family objects 
    A = Vector{Family}() 
    for k in sort(collect(keys(a1))) 
     # The values passed to the Family constructor were backwards 
     push!(A, Family(k, a1[k])) 
    end 
    A 
end 
+2

'convertToVector { T <:AbstractString}(a1 :: Dict {T、Int64}) 'パラメトリックが必要です。 – Gnimuc

+1

それははるかに良いだろう、私は同意する( 'Dict {AbstractString、Int64}'はうまくいくが、それは効率的ではない)。私はちょうどコードのバグを修正しようとしていた;-) –

1

別の方法(おそらく非常に迅速ではない):

julia> dict = Dict("fred" => 3, "jim" => 4) 
Dict{ASCIIString,Int64} with 2 entries: 
    "fred" => 3 
    "jim" => 4 

julia> Vector{Family}(map(f -> Family(f...), map(x -> collect(x), dict))) 
2-element Array{Family,1}: 
Family("fred",3) 
Family("jim",4) 

はおそらく、私があまりにも使用してきました最近多くのLisp ...

関連する問題