请教一个关于List<>的问题

snipes 2014-04-02 09:53:02
打个比方:
有一个报警日志类(AlertLog),类有属性报警编号(AlertCode)和报警时间(AlertTime)。
还有一个集合,List<AlertLog> Alst = new List<AlertLog>();
现在每报警一次就把AlertLog添加到集合AL中,但是每种报警编号只能存20条记录,假设某条记录等于20次了,则把这20条记录根据AlertTime排序,把最早发生的删掉,add最新的记录。

List<AlertLog> Alst = new List<AlertLog>();

public void WriteIntoLog(AlertLog alertLog)
{
int count = 0;
foreach (var item in this.Alst)
{
if (item.AlertCode == alertLog.AlertCode)
{
count++;
}
}

if (count < 20)
{
this.Alst.Add(AlertLog);
}
else
{

}
}
...全文
221 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
先Add进去,再判断相同Code的记录是否超过20条,如果超过则进行排序,然后将最早的一条的记录从list里面移除。
    public class AlertLog : IComparable
    {
        public string AlertCode { get; set; }
        public DateTime AlertTime { get; set; }

        public int CompareTo(object obj)
        {
            AlertLog log = (AlertLog)obj;
            if (log != null)
                return this.AlertTime.CompareTo(log.AlertTime);
            throw new ArgumentException();
        }
    }
        List<AlertLog> LogList = new List<AlertLog>();

        void WriteLog(AlertLog log)
        {
            LogList.Add(log);

            List<AlertLog> temp = LogList.Where(x => x.AlertCode == log.AlertCode).ToList();

            if (temp.Count > 20)
            {
                temp.Sort();
                LogList.Remove(temp[0]);
            }
        }
tcmakebest 2014-04-03
  • 打赏
  • 举报
回复
把最早发生的删掉,add最新的记录, 这很难吗,用个循环只需要几句代码
snipes 2014-04-03
  • 打赏
  • 举报
回复
引用 3 楼 tcmakebest 的回复:
把最早发生的删掉,add最新的记录, 这很难吗,用个循环只需要几句代码
List中还有别的编号的记录啊
guxingfeiyu 2014-04-03
  • 打赏
  • 举报
回复

        public static void WriteIntoLog(AlertLog alertLog) 
        { 
            int count = 0;

            AlertLog minDateTimeLog = alertLog;//如果要比较输入参数则minDateTimeLog=alertLog,
                                               //如果不需要比较输入参数则minDateTimeLog = null;
            
            foreach (var item in Alst) 
            { 
                if (item.AlertCode == alertLog.AlertCode) 
                { 
                    count++; 
                    if(minDateTimeLog == null || item.AlertTime < minDateTimeLog.AlertTime)
                        minDateTimeLog = item;
                } 
            }

            //Alst.Add(alertLog);如果需要比较输入参数则这个注释打开
       if (count >= 20) 
            {
                Alst.Remove(minDateTimeLog);
            }
            Alst.Add(alertLog);//如果不需要比较输入参数则这行注释掉
     }
本拉灯 2014-04-03
  • 打赏
  • 举报
回复


void WriteLog(AlertLog log)
        {
            LogList.Add(log);
            List<AlertLog> temp = LogList.Where(x => x.AlertCode == log.AlertCode).OrderBy(o=>o.AlertTime)ToList();
            if (temp.Count > 20)
            {
                 LogList.Remove(temp[0]);
            }
        }


  • 打赏
  • 举报
回复
引用 8 楼 u014513239 的回复:
 List<AlertLog> LogList = new List<AlertLog>();
 
        void WriteLog(AlertLog log)
        {
            LogList.Add(log);
            if (LogList.Count > 20)
            {
                LogList.Remove(temp[0]);
            }
        }
这样子不行吗?新手,求教育
楼主的意思大概是每一种报警编号的log不能超过20条,不是所有的log不能超过20条。
hi_小笨蛋 2014-04-03
  • 打赏
  • 举报
回复
错了~~~
 List<AlertLog> LogList = new List<AlertLog>();
  
        void WriteLog(AlertLog log)
        {
            LogList.Add(log);
            if (LogList.Count > 20)
            {
                LogList.RemoveAt(0);
            }
        }
hi_小笨蛋 2014-04-03
  • 打赏
  • 举报
回复
 List<AlertLog> LogList = new List<AlertLog>();
 
        void WriteLog(AlertLog log)
        {
            LogList.Add(log);
            if (LogList.Count > 20)
            {
                LogList.Remove(temp[0]);
            }
        }
这样子不行吗?新手,求教育
hi_小笨蛋 2014-04-03
  • 打赏
  • 举报
回复
引用 6 楼 vb763305825 的回复:
先Add进去,再判断相同Code的记录是否超过20条,如果超过则进行排序,然后将最早的一条的记录从list里面移除。
    public class AlertLog : IComparable
    {
        public string AlertCode { get; set; }
        public DateTime AlertTime { get; set; }

        public int CompareTo(object obj)
        {
            AlertLog log = (AlertLog)obj;
            if (log != null)
                return this.AlertTime.CompareTo(log.AlertTime);
            throw new ArgumentException();
        }
    }
        List<AlertLog> LogList = new List<AlertLog>();

        void WriteLog(AlertLog log)
        {
            LogList.Add(log);

            List<AlertLog> temp = LogList.Where(x => x.AlertCode == log.AlertCode).ToList();

            if (temp.Count > 20)
            {
                temp.Sort();
                LogList.Remove(temp[0]);
            }
        }
这个方法不错~~~
snipes 2014-04-02
  • 打赏
  • 举报
回复
引用 1 楼 devmiao 的回复:
那还不如用Queue<T>
关键就是要用List<T>。。。
devmiao 2014-04-02
  • 打赏
  • 举报
回复
那还不如用Queue<T>

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧