最近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:我的标题听起来很混乱,我想如果你对标题有更好的想法,请让我知道或更改它。
您可以将消息存储在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();
}