2011-07-08 10 views
1

私が作成した2つのハッシュテーブルがあります。これらの2つのハッシュテーブルのうち、どちらも同じキーですが、値は異なります。私はソートされたリストを使用して両方のハッシュテーブルを並べ替え、両方のテーブルで順番にキーを持っています。私がしようとしているのは、両方のハッシュテーブルをテキストファイルに書き込むことです。このテキストファイルでは、ハッシュテーブル1の値とハッシュ値の両方を持つキー(両方のハッシュテーブルで同じです)それの隣に表2があります。データはタブで区切られており、以下である何のようになります。ハッシュテーブルを結合してファイルに書き込む

Key Value Value 
128 123  6 
143 255  4 
Hashtable frequency = new Hashtable(); 
Hashtable grouplist = new Hashtable(); 

SortedList Grp = new SortedList (grouplist); 
SortedList Freg = new SortedList(frequency); 

foreach (DictionaryEntry entry in Grp) 
{ 
    foreach (DictionaryEntry maxval in Freq) 
    { 
      file.Write(entry.Key); 
      file.Write("\t"); 
      file.Write(entry.Value); 
      file.Write("\t"); 

      if(Freq[entry.Key].Equals(Grp[maxval.Key])) 
      { 
       file.WriteLine(maxval.Value); 
      } 
    } 
} 

私はそれが1つのハッシュテーブルと値からわずかキーと値を書き込むために取得するためのさまざまな方法を試してみました2つ目のハッシュテーブルから2つ目のハッシュテーブルを作成するだけですが、各キーの書き込みを75回繰り返します(両方のハッシュテーブルの合計キー数です)。

私は上記のコードのバリエーションが多く、必要に応じて)助けていただければ幸いです。

また、私がそれを働かせて、必要なものを書くことができる唯一の方法(それぞれ75回)は、 - ! - 両方のキーが同じであっても、ifステートメントで。私はプログラムをデバッグするときに同じものであることを確認することさえしました。

foreach (DictionaryEntry entry in Grp) 
{ 
    file.Write(entry.Key); 
    file.Write("\t"); 
    file.Write(entry.Value); 

    if (Freq.ContainsKey(entry.Key)) 
    { 
     file.Write("\t"); 
     file.Write(Freq[entry.Key]); 
    } 

    file.WriteLine(); 
} 

基本的には、Grp内のすべての項目のために、ファイルに書き込む: - おかげ

+2

なぜ非ジェネリックコレクションを使用していますか? – svick

答えて

0

は、あなたがこのような何かを試してみました。 Freqに一致するキーが含まれている場合は、Freqの値をファイルに書き込みます。私はまた、あなたのWriteLineコールが常に発生するように(あなたのサンプルではそうではありません)それを考慮に入れました。

私はこれをテストしていませんが、おそらくそれはあなたに何かを与えるでしょう。

0

なぜ、2つのforeachループを使用しているのですか。次のように私はあなたのコードを変更しました:

理想的
Hashtable frequency = new Hashtable(); 
    Hashtable grouplist = new Hashtable(); 
    SortedList Grp = new SortedList(grouplist); 
    foreach(DictionaryEntry entry in Grp) { 
     file.Write(entry.Key); 
     file.Write("\t"); 
     file.Write(entry.Value); 
     file.Write("\t"); 
     object maxVal = grouplist[entry.Key]; 
     if(maxVal != null) 
      file.WriteLine(maxVal); 
     file.WriteLine(); 
    } 
1

あなただけの単一のハッシュテーブルにあなたの2つのハッシュテーブルをカプセル化する必要があります(そして、あなたは矛盾を心配する必要はありませんし、ハッシュテーブルを維持するためのコードは簡単です) 。それを禁止する:

SortedList frequencies = new SortedList(frequency); 
foreach(var entry in frequencies) { 
    file.WriteLine(
     String.Format(
      "{0}\t{1}\t{2}", 
      entry.Key, 
      frequency[entry.Key], 
      grouplist[entry.Key] 
     ) 
    ); 
} 
+0

'TextWriter.WriteLine()'は書式設定オーバーロードを持っているので、 'string.Format()'を自分で呼び出す必要はありません。 – svick

1

問題は、75 x 75回繰り返すことです。あなたのコードは、のような書かれているように何がやりたいことは、あなたのコレクションの一つを超えるだけのループはこのように、他のコレクションへのインデックスにそのキーを使用して、ある

for (each of the 75 elements in one sorted lists) 
    for (each of the 75 elements in the other sorted list) 

それは... ...

です
foreach (DictionaryEntry entry in Grp) 
    var Key = entry.Key; 
    file.Write(Key); 
    file.Write("\t"); 
    file.Write(frequency[Key].Value); 
    file.Write("\t"); 
    file.Write(groupList[Key].Value); 
    file.Write("\t"); 
関連する問題