2016-11-17 14 views
0

のリストに要素を追加すると、任意の種類のリストにそのタイプの新しい要素を追加する方法はあります、自動的にジュリア - 特定のタイプ

私の問題は、私はいくつかと、辞書を持っている、ですキーとすべての値が配列され、そしてすべての配列は同じ長さの問題がある

a = Dict 
    x = [1,2,3] 
    y = ["a", "b", "c"] 
    z = [Dict(filled with stuff), Dict(also filled), Dict(filled)] 

のものであり、私は私がする必要があると何かニュートラル、FXでaの一つ一つの要素に追加する必要があります1回のの記入がとなり、結果として

a = Dict 
    x = [1,2,3,0] 
    y = ["a", "b", "c", " "] 
    z = [Dict(filled with stuff), Dict(also filled), Dict(filled), Dict()] 

しかしa文句を言わない、常にyx、このような構造とzすることができる同じように簡単にすべての整数の配列、浮く、または何でもミックス想像

TLこと; DRはI push!()にすることができますいくつかの自動方法で配列基本配列が保持する型の要素ですか?配列がArray{T}と定義されている場合は、自動的にタイプTを追加できますか?

簡単な説明

私は常に存在しているいくつかの標準的な変数を含むファイルを持っているだけでなく、追加のデータが存在しますが、この追加データは異なりますが、彼らは共通している何をすべきか、すべてのことです変数は長さにグループ化することができ、いくつかの変数は長さ95の配列であり、長さは長さ72などであり、それはどのようにグループ化されるかです。追加の配列はすべて辞書に入れられますが、データが追加された場合は、辞書が自動的に展開されて長さが一致するようにします。

+0

多分私は今日はちょっと遅いですが、私はあなたが何をしたいかまだ明確ではありません。あなたは起こることを望んでいるものの「擬似コード」の例を提供していますか? –

+1

こんにちは@TasosPapastylianou辞書の値は常に配列ですが、配列の型は常に不明です。一部の配列には文字列があり、その他は浮動小数点数などです。辞書内のすべての配列に!中立の要素、つまり空の文字列、0.0などの単一の要素 配列を配列{Any}に変換して空の文字列を – isebarn

答えて

2

一般に、型の中立値は何ですか?

neutral{T<:Number}(::Type{T}) = zero(T) 

Number秒間

neutral(::Type{String}) = " " 

あなたはzero機能が内蔵され使用することができ、:あなたはStringのために提案のようなので、あなたは、例えば、種類ごとに独自の関数を定義する必要がありますDictのための中立的要素が少し複雑です:

neutral{T<:Dict}(::Type{T}) = T() 
neutral{V}(::Type{Dict{TypeVar(:K),V}}) = Dict{Any, V}() 
neutral{K}(::Type{Dict{K}}) = Dict{K, Any}() 

フォールバックとして、あなたはまだ空のSTRIを使用することができますngがあなたのコメントのように:最後に

neutral(x) = "" 

、あなたは配列に中立的要素をプッシュする機能を定義することができます。たとえば

push_neutral!{T}(a::AbstractArray{T}) = push!(a, neutral(T)) 

push_neutral!([Dict(1=>2), Dict("1"=>2)]) 
3-element Array{Dict{K,Int64},1}: 
Dict(1=>2)  
Dict("1"=>2)  
Dict{Any,Int64}() 

これも実証しますDictの3つの異なる方法が必要です。混合型はパラメータKで示されているため、3つの定義の最初のものだけでは不十分です。

編集:EDIT2

foreach(push_neutral!, values(a)) 

::特殊なバージョン

neutral{K, V}(::Type{Dict{K, V}}) = Dict{K, V}() 

が不要であると思われるすべてのArray sが単純で行うことができます保持あなたのDictaにこの機能を適用します。

Edit3:おそらくNullableArrayが問題の解決策として優れています。しかし、現在のバージョンではまだ動作するのが少し難しいです。

+0

にプッシュするだけで、 "私はこの文字列を" Any "配列に固定する方法は、文字列、浮動小数点、Dict()が最も一般的ですが、すべての可能な型を見分けることができると思うので、すべてを粉砕するので、申し訳ありませんが、より良い安全性が、とにかくその答えを書く時間を取ってくれてありがとう – isebarn