我正在尝试为我的IRC中的用户保留一个计时器。当用户键入消息时,我正在尝试插入用户名&消息的时间。这是为了阻止垃圾邮件发送者。
if(userList.Contains(username)) {
//check the time of message
//if last message is 3 seconds ago or greater, continue
} else {
//Add username & time into the array keeping all other values too
}
问题是我不知道如何将数据附加到数组中。我不知道如何使用新值将其他现有数组数据复制到新数组中。可以这样做吗?
由于array.Contains()不适用于二维数组,我该怎么做才能记录用户名和时间?我应该在两个数组中插入数据吗?
感谢您的帮助。
答案 0 :(得分:2)
您必须创建List<T>
或Dictionary<K,V>
而不是两个dim数组。首先定义一个具有UserName,TimeOfMessage和Message etc字段/属性的类(比如Message
)并创建List<Message>.
答案 1 :(得分:2)
C#中的数组是固定大小的结构。
您想要一个“List”,它允许您将其实现为先进先出队列,或者,如果您想要随机删除和插入,则需要“词典”。
这两种结构都会动态分配存储空间,并允许您扩展和收缩用户数量。
答案 2 :(得分:2)
代码示例,这是一个粗略的想法,你可以从这里修改:
private static void Main(string[] args)
{
var list = new Dictionary<string, DateTime>();
list.Add("John", DateTime.Now.AddSeconds(-1));
list.Add("Mark", DateTime.Now.AddSeconds(-5));
list.Add("Andy", DateTime.Now.AddSeconds(-5));
PrintList(ref list);
IsSpam(ref list, "John");
PrintList(ref list);
IsSpam(ref list, "Andy");
PrintList(ref list);
IsSpam(ref list, "Andy");
PrintList(ref list);
}
private static void IsSpam(ref Dictionary<string, DateTime> list, string username)
{
if (list.ContainsKey(username))
{
if (list[username] < DateTime.Now.AddSeconds(-3))
Console.WriteLine("Not a spam");
else
Console.WriteLine("Spam");
list[username] = DateTime.Now;
}
else
{
list.Add(username, DateTime.Now);
}
}
private static void PrintList(ref Dictionary<string, DateTime> list)
{
foreach (var c in list)
Console.WriteLine("user: {0}, time: {1}", c.Key, c.Value);
}