如何将 Dict 作为参数传递给方法 Julia



您好,我尝试用Julia语言创建从Disct到Vector的转换器方法。但是我收到错误,我无法理解

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

任何想法热改变转换到矢量方法?

上面的代码中有几个错别字,但我认为这应该有效:

# 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

另一种方式(可能不是很快):

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......

最新更新