遍历两个Arraylist中的字符串对(w,t),把这个对以及它出现的次数保存到哈希表中。
先看程序: foreach (string w in arrdw) //此处arrdw和arrdt为ArrayList,其中保存了若干个英文单词。
{
foreach (string t in arrdt)
{
if (w == t) //如果两个单词重复,则跳过,不进行计算。
{
Console.WriteLine("word----term: {0}", w);
continue;
}
else
{
string[] a = {w,t}; //建立一个字符串组保存两个单词w,t
if (htwt[a] == null) //如果这对单词第一次出现在哈希表中,则他们的值等于1;
{
htwt[a] = 1;
}
else //如果不是第一次,则他们的值加一;(**)
{
htwt[a] = (int)htwt[a] + 1;
Console.WriteLine("word:{0}--------term: {1}------------Num: {2}", w, t, (int)htwt[a]);
}
}
}
}
程序就出现在两个*的那个位置,里面的代码不被运行, 即使出现了跟之前相同的单词对也不进行加值。 而是当做第一次出现保存到哈表中并赋予值“1”。 最后运行出来的结果是, 不管哈希表中的key是什么,他们的value全是“1”。
是不是因为我在定义字符串组的时候出现了问题, 希望大家能给看看, 不知道怎么改啊~~~ 谢谢大家,给点建议~~~
先看程序: foreach (string w in arrdw) //此处arrdw和arrdt为ArrayList,其中保存了若干个英文单词。
{
foreach (string t in arrdt)
{
if (w == t) //如果两个单词重复,则跳过,不进行计算。
{
Console.WriteLine("word----term: {0}", w);
continue;
}
else
{
string[] a = {w,t}; //建立一个字符串组保存两个单词w,t
if (htwt[a] == null) //如果这对单词第一次出现在哈希表中,则他们的值等于1;
{
htwt[a] = 1;
}
else //如果不是第一次,则他们的值加一;(**)
{
htwt[a] = (int)htwt[a] + 1;
Console.WriteLine("word:{0}--------term: {1}------------Num: {2}", w, t, (int)htwt[a]);
}
}
}
}
程序就出现在两个*的那个位置,里面的代码不被运行, 即使出现了跟之前相同的单词对也不进行加值。 而是当做第一次出现保存到哈表中并赋予值“1”。 最后运行出来的结果是, 不管哈希表中的key是什么,他们的value全是“1”。
是不是因为我在定义字符串组的时候出现了问题, 希望大家能给看看, 不知道怎么改啊~~~ 谢谢大家,给点建议~~~
{
htwt[a] = 1;
}
问题出现在这里,怎么判断是第一次出现在hashtable中呢 ,这样行吗?
用hashtable.contains试试吧
{
htwt[a] = 1;
}
这个位置出错啦,Arraylist是以键值对出现的
if (!htwt.Contains(a))
{
htwt[a] = 1;
}
else
{
htwt[a] = (int)htwt[a] + 1;
}
还是一样,哈希表输出的值都是“1”。 他们包含有重复的key, 为什么不相加啊。
是不是字符串组在存入哈希表的时候是以一个内存号码的形式存进去,而不是字符串本身啊
string[] b = { w, t };
bool equal1 = a.Equals(b); // <--false!KeyValuePair<string, string> kva = new KeyValuePair<string, string>(w, t);
KeyValuePair<string, string> kvb = new KeyValuePair<string, string>(w, t);
bool equal2 = kva.Equals(kvb); // true