在Javascript(Node.js)中分析此数组的最有效方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Javascript(Node.js)中分析此数组的最有效方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1996字,纯文字阅读大概需要3分钟。
内容图文
![在Javascript(Node.js)中分析此数组的最有效方法?](/upload/InfoBanner/zyjiaocheng/753/82cc9b4cc9b0428f96494a1bf8cb3846.jpg)
首先,我想指出这是服务器端的Node.js代码,而不是普通的客户端Javascript.我不想使用jQuery,但使用任何本机Node.js方法(如果你知道任何可能有用的方法)都没问题.
这是纸牌游戏中的机器人玩家的代码.机器人的手牌结构如下:
[ '9H', '10S', 'KD', '9D', '7D', 'QC', 'JC', '7C' ]
因此,8张牌中的每张牌都作为价值套装字符串给出.这是无法更改的,因为整个应用程序都适用于此结构.
现在,机器人必须分析这只手以搜索某些卡片组合.例如,它应该找到任何“第三王”(国王至少有2张相同套装的小牌),“第二王”(女王至少有1张相同套装的小牌)或“第三王后”.
在上面的例子中,它应该提出:第三王钻石和第三王牌俱乐部.
我正在寻找实现搜索算法来找到这些组合,但我担心它会非常低效.我的第一个想法是遍历数组以找到所有的国王,王后和10并将这些数据保存在某处,然后再次迭代它以计算我们拥有的同一套牌的其他牌数.例如,对于国王:
var kingsuits = [];
for(var i=0;i<8;i++){
if(hand[i].substr(0,1) == "K")
kingsuits.push(hand[i].substr(-1));
}
//now kingsuits has the suits of all kings, and we can go through our hand again and check how many cards we have in each of these suits...
我的问题是,有没有更有效的方法来实现这一目标?问题是,还有很多其他组合也应该被寻找,而不仅仅是我在上面举例说明的那些组合.
另外 – 也许更重要的是 – 如果我们找到“第三王”,我们根本不需要寻找“第三王后”或“第二王牌”.这些组合有一个明确的层次结构,所以如果我们找到第一个组合,我们根本不需要关心其他组合.
解决方法:
使用二维散列映射或数组或其他类型的直接访问数据结构,在该数据结构中存储特定类型的(boolean)或多少(int)卡.例如:
[ '9H', '10S', 'KD', '9D', '7D', 'QC', 'JC', '7C' ]
=>
| A K Q J 10 9 8 7 6 5 4 3 2
--+--------------------------------------
C | 0 0 1 1 0 0 0 1 0 0 0 0 0
D | 0 1 0 0 0 1 0 0 0 0 0 0 0
H | 0 0 0 0 0 1 0 0 0 0 0 0 0
S | 0 0 0 0 1 0 0 0 0 0 0 0 0
这应该允许在该结构中进行非常快速和简单的搜索 – 通过循环,您可以快速识别出有多个9,并且俱乐部女王旁边有2张俱乐部卡.
是否为黑桃选择一个对象或一个数组并且哪些(套装或值)是第一维或第二维并不重要.对于值,您将需要使用数组来获得定义的顺序,即使映射(例如A-> 0,K-> 1,…… 2-> 12)是非常规的.
内容总结
以上是互联网集市为您收集整理的在Javascript(Node.js)中分析此数组的最有效方法?全部内容,希望文章能够帮你解决在Javascript(Node.js)中分析此数组的最有效方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。