模式的快速匹配与查找

在做APP或者游戏的时候经常会遇到这样的情况:不同的渠道,不同的省份,不同的运营商会返回不同的值,还有默认全渠道是给什么值,默认全省份或者全运营商给什么值,我们看下面简单的图。这样一种需求我们该怎么快速的做出匹配呢?



 

 

通过观察可以得到一个规律,需要匹配的字段(上图中的“渠道”,“省份”,“运营商”)要么是一个确定的数,要么是ALL(表示所有)。那么我们把上图转换成下面的这张:(这个图和上面的图不是一一对应哦。)



 

其实就是把上面的固定值替换成1,ALL替换成0。3个匹配字段,2个不同的值,根据数学的排列组合,总共的模式有2的3次方=8种:



 

这些组合还有一些顺序,比如最后匹配的是最模糊的(0,0,0),最上面的是最精确的(1,1,1),这个顺序可以根据业务需求来。

好,默认已经设计好了,下面来看我们怎么在程序中使用。

为了更加形象我还是举前面的例子:

1、首先配置需要匹配的数据:



 

 

加载到内存的MAP中,存放的格式(数据之间用下划线“_”隔开)如下:



 

2、假设现在有一个客户端请求过来,对应的数据,渠道:QD2;省份;ZJ;运营商是:YD。然后根据上面的8种模式以及顺序,在内存中组合(具体的组合方法有很多中,比如:把模式定义成二维数组通过循环把对应的数据填进去,遇到0则跳过,1则添加对应的数据)成下面的形式把(放到List里面):



 

3、通过List循环匹配第1步中的MAP,就能快速找打了,像例子中的第一条就匹配上了获得了值100,匹配上了之后立马跳出循环。

总结,这种模式可以扩展多个字段,字段越多模式就越多,每种模式的顺序需要根据具体的业务需求来确定。

欢迎访问个人网站pengmj.com,更多原创文章可阅!

猜你喜欢

转载自pengmj.iteye.com/blog/2262009
今日推荐