我需要在每个printout()
方法调用之后更新我的哈希表,但每当我这样做时,它只显示最新添加的内容,而不是我已经添加了值的整个哈希表。
主:
static void Main(string[] args)
{
int NOP = 0;
Console.WriteLine("How many people to gift?");
NOP = Convert.ToInt32(Console.ReadLine());
for(int i=0;i<NOP;i++)
{
printout(NOP);
NOP--;
}
Hashtable hashtable= printout(NOP);
foreach (string key in hashtable.Keys)
{
Console.WriteLine(String.Format("{0}: {1}", key, hashtable[key]));
}
Console.Read();
}
哈希表方法:
public static Hashtable printout(int NOP)
{
Hashtable hashtable = new Hashtable();
string[] names = new string[50];
int[] FriendsMoney = new int[50];
string GiftGiver = "";
int AmountGifted = 0;
int AmountDivider = 0;
string[] GiftRecievers = new string[50];
//input
//----print names-----//
Console.WriteLine("Names of the " + NOP + " people?");
for (int i = 0; i < NOP; i++)
{
names[i] = Console.ReadLine();
}
//-----gift giver----//
Console.WriteLine("Who is the gift giver?");
GiftGiver = Console.ReadLine();
//-------AmountGifted------------//
Console.WriteLine("Amount to gift?");
AmountGifted = Convert.ToInt32(Console.ReadLine());
//--------AmountDivided----------//
Console.WriteLine("How many people to divide gift among?");
AmountDivider = Convert.ToInt32(Console.ReadLine());
//----------Gift Recievers----------//
Console.WriteLine("Names of gift recievers?");
for (int i = 0; i < AmountDivider; i++)
{
GiftRecievers[i] = Console.ReadLine();
}
AmountGifted = AmountGifted / AmountDivider;
for (int i = 0; i < AmountDivider; i++)
{
hashtable.Add(GiftRecievers[i], AmountGifted);
}
return hashtable;
}
我想要的是保留旧值并在使用密钥时更新它们。
答案 0 :(得分:1)
可能是因为您使用GiftRecievers[i] = Console.ReadLine();
中的相同密钥与hashtable.Add(GiftRecievers[i], AmountGifted);
一起使用。
使用函数hashtable.ContainsKey(GiftRecievers[i])
检查是否已添加密钥。如果添加了Hashtable,则将当前项替换为新的AmountGifted
。
使用迭代器查看HashTable中存储了多少项而不是使用foreach(string key in hashtable.Keys)
:
foreach (DictionaryEntry de in hashtable)
{
Console.WriteLine("{0}: {1}", de.Key, hashtable.Value);
}
此外,在您的问题中包含一个控制台输出,以显示您输入的数据作为键和值。
更新:每次调用public static Hashtable printout(int NOP)
时,您都在创建一个新的HashTable实例。如果你想使用相同的Hast表修改你的函数来接收HashTable实例作为参考,像这样:
public static void printout(ref HashTable hashtable, int NOP)
{
//Hashtable hashtable = new Hashtable(); //It is passed as an argument
string[] names = new string[50];
//...
for (int i = 0; i < AmountDivider; i++)
{
hashtable.Add(GiftRecievers[i], AmountGifted);
}
//return hashtable; //remove the return.
}
同时,在main
中创建Hashtable实例并传递它引用的参数:
static void Main(string[] args)
{
Hashtable hashtable = new Hashtable();
int NOP = 0;
Console.WriteLine("How many people to gift?");
NOP = Convert.ToInt32(Console.ReadLine());
for(int i=0;i<NOP;i++)
{
printout(ref hashtable, NOP);
NOP--;
}
printout(ref hashtable, NOP);
foreach (string key in hashtable.Keys)
{
Console.WriteLine(String.Format("{0}: {1}", key, hashtable[key]));
}
Console.Read();
}