2011-07-08 34 views
1

我有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); 
      } 
    } 
} 

我已經嘗試了許多方法來得到它從一個哈希表和值寫入剛剛鍵和值從第二個哈希表,但它只是重複編寫每個密鑰75次(這是兩個哈希表的總數。)

我有上面的代碼的許多變化,他們都做同樣的事情(可以發佈它們如果需要)。任何幫助將不勝感激。

此外,唯一能讓它工作並寫出所需內容(每次75次)的方法是,如果我放一個 - ! - 在if語句中,儘管兩個鍵都是相同的。我甚至在調試程序時檢查它們是否一樣。 - 感謝

+2

你爲什麼使用非泛型集合? – svick

回答

0

你有沒有嘗試過這樣的事情:

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每一個項目,將其寫入文件。如果Freq包含匹配的密鑰,請將Freq中的值寫入該文件。我還分析了你的WriteLine調用,以便它始終發生(在你的示例中它不會)。

我沒有測試過這個,但也許它會給你一些東西繼續下去。

0

我不知道,爲什麼你使用兩個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

理想情況下,你應該只是封裝你的兩個哈希表成一個單一的哈希表(那麼你不必擔心不一致之處,並保持哈希表的代碼更容易) 。除外:

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");