您的位置:首页 > 其它

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

2016-02-16 13:57 267 查看
业务需求:

需要知道一个新建的账号在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的分布,就可以查看玩家的登录情况了!!!

是不是猴赛雷
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: