2017-10-05 24 views
0

私は、さまざまなコンテキスト(一般的なコンテキスト、メニューコンテキスト、ゲームコンテキストなど)のテキストを扱うテキストマネージャクラスを作成しました。C#辞書内で辞書を検索する最速の方法

すべてのコンテキストは、バイナリテキストファイルを使用して作成され、データは、このような辞書内の辞書に格納されます。

このように動作します
private Dictionary<string, Dictionary<string, string>> m_TextContexs; 

:私は希望

m_TextContexs[context][textID][actual text] 

ユーザは、次のような関数内の 'textID'文字列の文字列しか見つけられません。

public string GetText(string id) 

編集済み:textIDは、複数のコンテキストに同じtextIDが存在しないという意味で一意です。

したがって、この関数は既存のすべてのコンテキストで文字列idを見つけ、有効な実際のテキストを返す必要があります。

ここでの質問は、この操作を行う最も早い方法です。私は経験豊富なプログラマーではないので、すべてのコンテキストを順番に調べて、それぞれのテキストIDが存在するかどうかを調べます。

「コンテキスト」はテキストをグループ化する必要があるのか​​疑問がある場合は、コンテキストが不要になった場合にそのデータをメモリからアンロードできます。事前に

多くの感謝:)

+0

"辞書内の辞書"という意味の良い例を教えてください。 – NightOwl888

+0

また、最も速いとはどういう意味ですか?パフォーマンス?コードに費やす時間は?メモリ使用量などの他の考慮事項はどうですか? – AndrewP

+0

NightOwl888辞書内の辞書を検索すると、先ほどオブジェクトm_TextContextsに対して書いた行を意味します。メイン辞書のキーは、c1、c2、c3などのような多くのコンテキストです。各コンテキスト内には、実際のテキストのペアを含む辞書があります。たとえば、textID "id001"はメイン辞書の任意のキーに入れることができます。しかしそれはユニークです(異なった文脈の間で繰り返されないので)。 – Cris

答えて

4

辞書は実質的に瞬時に意味、Oのキーから値(1)時間を取得するので、この質問は本当にあなたのcontextがある動物の種類をにかかって、そしてどのようにユニークなtextIdです。

「正しい」コンテキストがどのように分かりますか?あなたは、ユーザーの現在の場所からこれを判断することができますか、アプリ内のパス?その場合は、という値がの値をルックアップ関数に渡すことができます。

textIdがコンテキスト間でユニークでないかぎり、コンテキストをループするとうまくいきません。たとえば、textId 123と指定した場合、m_TextContexs[context1][123]またはm_TextContexs[context2][123]のどちらを使用するかをどのように知ることができますか?

textIdは、コンテキスト(最良のシナリオ)全体で一意ある場合は、単に絵からcontextを排除し、textIdが唯一の鍵であることをDictionary<string, string>を使用することができます。

+1

そして、textIdが一意だが、コンテキストも重要な場合は、おそらくtextIdをキーにするように元の辞書を反転し、context/textの値がstruct/classであるため、 – AndrewP

+0

ありがとうポールスミス、私は馬鹿です、私は複数の状況で同じIDを考慮しませんでした。 Excelファイルからすべてのテキストをエクスポートすると、IDが一意であることを確認します。これを仮定すると、AndrewPが元の辞書を反転させる点が理にかなっています。多くのありがとう! – Cris

+0

Paul SmithとAndrew - 私はまだこのアルゴリズムを実装するためのベストと最速(性能上の賢明さ)が何であるかまだよく分かりません。 textIDsが一意であると仮定して、私はtextIDとしてメインキーを持つことを避けたいと思っていますし、その値は実際のテキスト文字列とコンテキスト文字列を持つ構造体またはクラスになります。辞書内では、メモリの無駄に見えます。コンテキストを保持したいので、テキストが不要になったためにコンテキストをアンロードしたいときは、コンテキストキーをメインディクショナリに放すだけで、すぐに実行できます。 – Cris

関連する問題