如何统计一个新玩家在60天内的登录情况----std::bitset

9 篇文章 0 订阅
8 篇文章 0 订阅

业务需求:

需要知道一个新建的账号在60天内登录的情况。

机智的程序猿们都会想到用stl的各种关联容器去记录而后分析。

经过仔细考量,本猿想到另外一种办法可以简单的实现该需求,并且可以使数据存储尽可能小。

废话不多少,上代码:

void Player::updateLoginStatistics()
{
    time_t now = Timestamp::now();
    int32_t distance_days = (now - create_time_) / 86400;
    if (distance_days > 60) {
        return;
    }    


    std::bitset<64> info(login_statistics_);
    if (false == info.test(distance_days)) {
        info.set(distance_days);
        login_statistics_ = info.to_ulong();
    }    
}

该函数完美解决问题。

记得在玩家登录的地方调用updateLoginStatistics();

大致思路,建号时间和当前时间差值大于60天的不予处理。距离建号n天,那么我们就设置第n位为1。

我们用一个8字节的变量login_statistics_来存储记录。

玩家首次登陆,打印日志如下:

(updateLoginStatistics) before 0 0000000000000000000000000000000000000000000000000000000000000000
(updateLoginStatistics) after 1 0000000000000000000000000000000000000000000000000000000000000001

数据分析:

只需要统计login_statistics_中的2进制中1的分布,就可以查看玩家的登录情况了!!!

是不是猴赛雷

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值