我有2个已创建的哈希表。在这两个哈希表中,它们都具有相同的密钥,但具有不同的值。我已经使用排序列表对两个哈希表进行了排序,以便在两个表上按顺序排列密钥。我试图做的是将两个哈希表写入文本文件,并在此文本文件中,它将具有哈希表1中的值和哈希值中的键(两个哈希表中相同)旁边的表2。数据由TAB分隔,看起来如下所示:
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);
}
}
}
我已经尝试了很多方法让它只从一个哈希表中写出Key和Value以及从第二个哈希表中写出值,但它只重复写入每个键75次(这是键的总数Hash表。
我有上述代码的许多变体,它们都做同样的事情(如果需要可以发布它们)。任何帮助将不胜感激。
此外,我能让它工作并写下所需的东西(每次75次)的唯一方法是,如果我放一个 - ! - 在if语句中,即使两个键都相同。我甚至检查过以确保在调试程序时它们是相同的。 - 谢谢
答案 0 :(得分: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]
)
);
}
答案 1 :(得分: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)
你想要做的只是在你的一个集合上循环,使用它的Key来索引到另一个集合,就像这样......
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");
答案 2 :(得分: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
电话,以便它始终发生(在你的样本中没有)。
我没有测试过这个,但也许它会给你一些东西继续。
答案 3 :(得分: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();
}