满足条件时将数据附加到数组中?

时间:2012-01-13 01:32:49

标签: c#

我正在尝试为我的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()不适用于二维数组,我该怎么做才能记录用户名和时间?我应该在两个数组中插入数据吗?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您必须创建List<T>Dictionary<K,V>而不是两个dim数组。首先定义一个具有UserName,TimeOfMessage和Message etc字段/属性的类(比如Message)并创建List<Message>.

答案 1 :(得分:2)

C#中的数组是固定大小的结构。

您想要一个“List”,它允许您将其实现为先进先出队列,或者,如果您想要随机删除和插入,则需要“词典”。

这两种结构都会动态分配存储空间,并允许您扩展和收缩用户数量。

答案 2 :(得分:2)

使用Dictionary<TKey, TValue>

代码示例,这是一个粗略的想法,你可以从这里修改:

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