最近3条发送的消息与最新消息相对,而仅保存最近3条最新消息

本文关键字:最近 最新消息 3条 保存 相对 消息 | 更新日期: 2023-09-27 18:09:07

目前我为用户提供了一个简单的类,如下所示:

public class Users
{
    public int ID { get; set; }
    public string Name { get; set; }
    public Groups Access { get; set; }
    public IPAddress IP { get; set; }
    public bool IsProtected { get; set; }
    public bool IsInvisible { get; set; }
}

现在我想存储用户最近发送的3条消息,并能够比较用户新的最后一条消息是否与之前的3条存储消息中的任何一条匹配,如果不匹配,则从列表中删除最旧的消息并添加新的消息。

我最初想的是简单地使用字符串列表,然后像这样:

bool msg_match = user.LastMessages.Any(x => String.Equals(x, msg, StringComparison.OrdinalIgnoreCase));
if (msg_match)
{
    // punish user
    user.LastMessages.Clear();
}
else
{
    // some way to remove oldest message and leave only the 3 newest messages
    user.LastMessages.Add(mensagem);
}

以上方法确实有效,但我有点不知道如何选择要删除的最旧的消息,从而导致最后的最新消息,也不确定这种方法是否可行,或者是否有更好的方法来解决这个问题?

PS:我的标题听起来很混乱,我想如果你对标题有更好的想法,请让我知道或更改它。

最近3条发送的消息与最新消息相对,而仅保存最近3条最新消息

您可以将消息存储在LinkedList<string>中。这将使您的检查变得简单:

bool msg_match = user.LastMessages.Any(x => String.Equals(x, msg, StringComparison.OrdinalIgnoreCase));
if (msg_match)
{
    // punish user
    user.LastMessages.Clear();
}
else
{
    // some way to remove oldest message and leave only the 3 newest messages
    user.LastMessages.AddFirst(mensagem);
    if (user.LastMessages.Count > 3)
        user.LastMessages.RemoveLast();
}