2021/02/23:删除linq包使用示例,修改二进制工具与单测类,修改lomuto划分,修改前缀树与单测类,修改时间比较工具
基本说明
作者:黄志军
代码审核:老施
时间: 2020/10/27 15:19
设计目的
本工具类设计主要目的是为了实现通过bit位来存储不同档位奖励的领取情况,这边领取情况分为0,1两种,也就是当前档位奖励已经被领取和未被领取两种情况。
参数说明
const静态参数
bit:表示当前数组的每个数字代表的档位,比如说当前bit=32,如此的话,下面的属性GearPickList数组的每个元素就是代表了32个档位,如果bit = 30,则代表了30个档位。
因为int类型最大是64位,所以在修改的时候设置bit最多为64位,超过则会出现奇怪的问题,无法保证。
且有些机器int只支持32位,则需要根据不同的机器进行对应的设置,才能保证程序的完整功能实现。
BitStore属性参数
MaxGear:当前支持存储的最大档位,这边的最大档位是初始化的时候进行设置的。根据bit的值,拆分出对应数量的数组来表示每一个对应的档位。比如说这边的bit = 32.需要存储的最大档位是33,则数组通过两个元素进行档位确认。第一个数最多达到32位的存储,第二个数,最多存储1位。
GearPickList:数组,用来表示对应档位的奖励,举例,bit = 32,数组的第一个元素表示的是1-32档的档位领取情况,第二个数组表示33-64档的档位领取情况...当然这边最大的档位取决于MaxGear。
支持动态增长、初始化。某一时刻数组长度不能代表对应的档位信息,因为其支持动态增长,长度与所属所有档位不一定对的上。
方法使用说明
初始化方法
NewBitStore:这边接受两个参数
-
一个是最大的档位设置,这个是根据每次处理的最大档位进行传入的
-
一个是档位数组,这边支持传入nil,[]int,0 、或者是带有元素的数组(表示有存档信息,比如说从数据库中获取到的,表示前一次存储的结果.)
所有档位领取情况Map
FindAllGearMap:
该方法支持返回所有档位领取情况的map.奖励已经领取则返回true,奖励未领取则返回false。
因为GearPickList数组支持动态增长,所以该方法对应完整数组和非完整数组拥有两套不同的实现方案,具体详见代码
判断奖励是否被领取
IsGearReceive:
该方法会先检测传入的档位信息是否正确
若当前GearPickList数组未被初始化,则进行初始化(动态性)
判断档位长度和数组长度对应关系,如果数组长度非完整,直接返回false,如果是被领取的,则当前档位对应的数组必定是完整的
若档位完整,则通过与运算计算对应档位的领取情况.(true表示已领取,false表示未领取)
获取对应档位奖励
ReceiveByGear:
领取对应档位的奖励,返回奖励档位数组GearPickList及所有档位领取情况map。
判断对应档位是否被领取,如果被领取则直接报错
此方法对GearPickList的长度进行动态增长,并将对应档位的移位信息加到数组对应位置的元素上