算法:如何计算当月签到最大天数?

KMSFan 发布于 2016/10/29 13:00
阅读 336
收藏 0

其实这个问题有2个子问题: 

    1.如果我有一张表,有个字段叫做InsertTime,插入时间,插入时间一天可能有多个,假设我现在要统计一个月的个数,比如1号有2条记录,2号有3条记录,那么总共只算2条记录而不是5条,这个问题最好是用JAVA或者.NET的LINQ解决。


    2.在上面的基础上,我要计算连续的最近的一个连续最大天数比如1,2,3号有记录,4号没记录 5,6,7,8号有记录,如果今天是8号,那么就是4有哪位大神知道吗?谢谢。只算这个月的。 

    如果一个方法写出来肯定是最好的了,因为我用的是.NET,以当前时间作为参造哦。

编辑:第二个问题解决了,但是第一个问题,该怎么解决呢?附上解法。

        /// <summary>
        /// 本月连续签到天数
        /// </summary>
        /// <returns></returns>
        public int KeepSignDaysThisMonth(string username)
        {
            if (!string.IsNullOrEmpty(username))
            {
                var user = _userService.Filter(x => x.UserName == username).FirstOrDefault();
                if (user != null)
                {
                    var userLogs = _userScoreLogService.Filter
                         (x => x.UserId ==
                         user.UserId && x.InsertTime
                         >= CommonHelper.GetMonthFirstDay()
                         && x.InsertTime <= CommonHelper.
                         GetMonthLastDay()).OrderByDescending
                         (x => x.InsertTime).ToList();

                    //int currentDay = userLogs[0].InsertTime.Day;
                    int signDay = 0;
                    for (int i = 0; i < userLogs.Count; i++)
                    {
                        if (userLogs[i].InsertTime.Day - userLogs[i - 1].InsertTime.Day > 1)
                        {
                            signDay = i+1;
                            break;
                        }
                    }
                    return signDay;
                }
            }
            return 0;
        }



加载中
0
KMSFan
KMSFan

问题解决了。。。

/// <summary>
        /// 本月连续签到天数
        /// </summary>
        /// <returns></returns>
        public int KeepSignDaysThisMonth(string username)
        {
            if (!string.IsNullOrEmpty(username))
            {
                var user = _userService.Filter(x => x.UserName == username).FirstOrDefault();
                if (user != null)
                {
                    var userLogs = _userScoreLogService.Filter
                         (x => x.UserId ==
                         user.UserId && x.InsertTime
                         >= CommonHelper.GetMonthFirstDay()
                         && x.InsertTime <= CommonHelper.
                         GetMonthLastDay()&&x.ScoreType
                         ==ScoreTypes.Sign).OrderByDescending
                         (x => x.InsertTime).ToList();

                    //int currentDay = userLogs[0].InsertTime.Day;
                    int signDay = 0;
                    for (int i = 0; i < userLogs.Count; i++)
                    {
                        if (i != userLogs.Count - 1)
                        {
                            if (userLogs[i].InsertTime.Day - userLogs[i - 1].InsertTime.Day == 1)
                            {
                                ++signDay;
                            }

                            if (userLogs[i].InsertTime.Day - userLogs[i - 1].InsertTime.Day > 1)
                            {
                                break;
                            }



                        }


                    }
                    return signDay;
                }
            }
            return 0;
        }



返回顶部
顶部