2016-11-19 7 views
0

私はC#を使用してハッシュテーブルを作成し、このハッシュテーブルの各販売に多数のHtmlタグを格納します。次に、ハッシュテーブルからコードを読み取って意味論的に正しく出力することを示すアルゴリズムを記述したいと思います。例えばハッシュテーブルから意味的にデータを取得します

:私は私のハッシュテーブルを持っている場合は、このような何か:私は、このように

<html> 
<head> 
<title> 

</title> 
</head> 
</html> 
... 

<html>|<title>|</head>|</html>|</title>|<head>|... 
----------------------------------------------------- 

最終的な出力があり、正しいもののようになります

  1. ハッシュテーブルにコードを保存するにはどうすればいいですか?
  2. ハッシュテーブルからコードを意味的に読み取るにはどうすればよいですか?
  3. より良い方法や簡単な方法はありますか?

あなたのアイデアを聞かせて、あなたの視点に欠けている情報がある場合は、私に知らせてください。私はより良い方法で私を助けるためにそれらの情報を提供します。私は右のあなたの質問を理解している場合は、順不同でタグを扱っているように、事前

+0

この[リンク](https://msdn.microsoft.com/en-us/library/system.collections)を参照してください。ハッシュテーブル(v = vs.110).aspx)。 – Han

+0

@HandokoChen Hashtableクラスは新しい開発には適していませんが、強く型[Dictionary](https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx)を使用する必要があります。代わりにクラス –

+0

@ScottChamberlain私は知っている。しかし彼はハッシュテーブルについて尋ねました。 – Han

答えて

0

おかげで、それはそうです、そして、あなたはそれらを正しく注文したいです。そうすることは簡単ではありません...

正確にそれをしているシステムを構築しようとすると、後ろに隠れているすべての複雑さが表示されます。

各タグはキーで表す必要があります。タグは開かれているか(例えば<html>)、閉じています(たとえば</html>)、または空です(たとえば<html />)。最初の2つのフォームはペアになっている必要があります。そのため、両方とも覚えているようには思えません。閉じたタグが見つからない場合は、とにかくそのエラーを自動的に修正することになります。

ですから、構造(タグ、RequiresClose)でタグを記述し、その後string -> boolをマッピングするハッシュテーブルまたは辞書を構築し、ブール値は、タグは、対応する終了タグを必要とするかどうかを示す場合があります。

<html>|<title>|</head>|</html>|</title>|<head> 

これらのタグは次のように辞書を移入します:

html -> true 
title -> true 
head -> true 

そして、あなたは、タグの出力シーケンスを構築することになる、この辞書のインタプリタを構築する必要があります。以下はインタプリタの擬似コードです。

Interpret() 
    InterpretHtml() 

InterpretHtml() 
    if html not present in dictionary then quit 
    if dictionary['html'] = false then print <html /> and quit 
    print <html> 
    InterpretHead() 
    InterpretBody() 
    print </html> 
    remove html from dictionary 

InterpretHead() 
    if head not present in dictionary then quit 
    if dictionary['head'] = false then print <head /> and quit 
    print <head> 
    InterpretTitle() 
    print </head> 
    remove head from dictionary 

InterpretTitle() 
    if title not present in dictionary then quit 
    if dictionary['title'] = false then print <title /> and quit 
    print <title> 
    // somehow find the title and print it 
    print </title> 
    remove title from dictionary 

このアプローチは面倒であり、予測可能な出力を生成しません。

したがって、私はあなたの仕事を徹底的に再考し、全く異なる方法で行うことをお勧めします。 HTMLは階層的なドキュメントを生成しているので、スタックを使用して入力上のタグの正しい順序を強制することを検討することができます。

+0

まず、あなたの説明に感謝します。 – mazName

+0

スタックを使用している最後の文章に関する質問があります。多くの入力があり、ハッシュテーブルからタグを追加したり削除したりできる人がいれば、スタックの辞書を想像してみてください。人が来ることができるようにスタックは、入力を格納する正しい方法ではありませんし、しばらくしてからを追加して、どこに置くべきか分かりません。私は正しい?それとは別に、出力はすべての入力を一度表示して終了することではありません。私は私の質問で "意味論的にデモンストレーションする"と言いました。なぜなら、何度も何度もが出てくるでしょう。 – mazName

+0

出力は入力のセットに基づいています。例えば、質問は「5段落のhtmlページ」です。そして、私のコードは辞書から意味的にデータを取り出し、その質問に基づいて出力に出力する必要があります。 – mazName

関連する問題