2011-11-03 10 views
2

データの非線形解析

// pseudocode 

Npc[] npcs; 
for (jsonNPC : jsonNPCs) { 

    Quest[] quests; 
    for (jsonQuest : jsonNPC.quests) { 
     quests.add(new Quest(jsonQuest.get(foo), jsonQuest.get(bar), ...)); 
    } 

    npcs.add(new Npc(jsonNPC.get(name), quests, ...)); 

} 

これは正常に動作しますが、それもっと複雑になる。我々は今、クエストが他のQuestインスタンスを「前提条件のクエスト」として参照させたいと考えています。

参照するクエストは、参照クエストが構築された後でのみ解析される可能性があります(入力データが順序付けられていないか、NPC間で双方向参照がある可能性があります)。つまり、建設時にそれを取り付けることはできません。しかし、Questは不変なので、我々はする必要があります。

このような問題は通常どのように解決されますか?

(注:何の循環参照はありません助けるべきだと、私は思う)

答えて

1

前提クエストは常にそれらを必要とする前のクエストJSON文字列に配置されている場合、あなたは、単にquestIDを追加することができますprerequisiteQuestIDフィールドと、それらのIDで注文されたすべての解析されたクエストを保存します。 prerequisiteQuestIDが発生した場合は、リストからクエストを選択できます。

クエストが発注されていない場合は、一時的に保存する必要があります。データを保持している変更可能なクラスを設計し、最後にすべてのクエストの実際のクエストオブジェクトを作成し、それらを明確なリストに追加します。

+0

"クエストが注文されていない場合" - そうです。しかし、一時的なグラフは動作します。 –

+0

どのjsonパーサーを使用しますか?私は、オブジェクトのプライベートフィールドをjsonデータで埋める[google gson](http://code.google.com/p/google-gson/)に満足しています。したがって、他のクラスのプライベートフィールドに依存することはできないため、常に独自のjson-data保持クラスを作成する必要があります。私はgsonにjsonを解析して自分のクラスの構造にしてから、これらを通って必要なオブジェクトを作成させます。 – Yogu

+0

JSONデータはGsonにとって複雑すぎます。それは、解決される必要がある参照、異なるクラスに変換する必要がある型パラメータなどを含みます。 –

関連する問題