首页 > 其他 > 详细

模式的快速匹配与查找

时间:2015-12-06 02:11:49      阅读:172      评论:0      收藏:0      [点我收藏+]

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


bubuko.com,布布扣
?

?

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


bubuko.com,布布扣
?

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


bubuko.com,布布扣
?

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

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

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

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


bubuko.com,布布扣
?

?

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


bubuko.com,布布扣
?

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


bubuko.com,布布扣
?

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

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

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

模式的快速匹配与查找

原文:http://pengmj.iteye.com/blog/2262009

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!