帮顶
^_^,之前还有 rails 的 benchmark,后来估计是被 github 上那位仁兄给抛弃了。
main_controller +1
另外,还需要判断一下,如果 num 不是小数的情况,num.to_s.index('.') 会是 nil,会报错哈。
除非你非常确定 num,必是小数
num = num.to_f.to_s num[0, num.index('.') + tail + 1].to_f
这样看起来舒服些。免得两个 to_s,呵呵
#17 楼 @jxs471494539 嗯。是的
#14 楼 @jxs471494539 后面那个你不用管他,float 本身就是不精准的, 如果你要的是字符串的话
前面加上 '%.3f' %即可。
tail = 3 # 保留小数位 num = 1.2346 # 输入数据 "%.#{tail}f" % (0.1 ** tail * (10 ** tail * num).to_i)
如果你要的是 float 的话,类似于 1.2 这种。小数位不足的,似乎是很难达到需求。
'%.3f' % ((1.2 * 1000).to_i * 0.001) => "1.200"
'%.3f' % ((1.2346 * 1000).to_i * 0.001) => "1.234"
'%.3f' % ((-1.2346 * 1000).to_i * 0.001) => "-1.234" 可以自己写个方法,支持自定义位数。
#1 楼 @leslin123 大牛们现在都还没起床。^_^
比格邦,,没有 big-bang 好识别。反应了半天才反应过来。帮顶。
打算跟 ruby 死磕,默默地漂过。node,go 用了都感觉没 ruby 好使。还是死磕吧。
以下是个人的一点 IOS GAME SERVER 开发经验,欢迎指正(以下客户端简称为 C 端,服务端简称为 S 端):
1、controller 级参数 validate。参数是否不可缺失,合法性,合理性,结合自己维护的一套错误信息编号,返回给 C 端。这里之所以没有采用 model 层的 validate,个人的看法是,在 model 层的操作之前会有很多逻辑需要处理,关联较多,validate 越早越好,一层层过滤不合法的请求。
2、C 端大多是导步的,就是发了这个请求之后,他就一边玩儿去了,并没有守在这里等这个请求返回结果。所以你返回给 C 端的 JSON 里面,有必要指出这个 JSON 对应的是哪个请求。 这里我采用的是
render :json => { action_name => ... }
这种方式,当然,如果有更好的方式,可以@我。
如果用这种方式,那就需要注意
(1)、所有 action_name 保持唯一 (2)、routes 里 post、get 后面的'xxx'需要与 action_name 保持一致。
3、所有敏感数据自己维护一套常量,特别是可变数字,尽量不要通过参数的形式传递。我做 server 端的过程中,从来不信任 C 端发过来的可变数字。可能这是病吧,总担心如果有人模拟请求,会带来意外的灾难。另外如果实在逼不得已,需要采用参数里面的可变数字,那做减法之前,别忘了事先.abs 一下,许多无聊的人,会试探你的请求,然后模拟,如果你减法不做 abs,so,那个被减的对象遇到一个负数的参数的时候,他就变成加法了,越减越多。
4、如果有许多 C 端和 S 端都会用到许多常量,那请认真构思一下你的常量系统。以哪种类型作为常量的载体,常量如何载入 S 端,C 端如何动态增量更新 S 端已有常量数据。
5、如果你的 C 端是游戏产品,那么你还有必要考虑一下 S 端数据的虚拟化、实体化的问题。 如:一个角色可能会有许许多多,几十上百件装备,如果这些装备都处于未使用也未被强化提升的等级,如:1 级,那么我认为,这几十上百件装备对于 S 端来讲,都是不存在的。我们只需要给这个角色的装备库里存上几十上百个装备类型,如:101001,201001 等,用来代表这个角色拥有这些装备类型的最低等级的装备。
其他就暂时没有想到了。欢迎指正,补充。
客户端是异步的,服务端也应该返回这个 json 属于哪个请求的吧?不然客户端拿到 JSON,都不知道是对应哪个请求的,怎么进行下一步的处理呢。难道是 code:10000?呵呵。。感觉太难理解了这样做。除非有相当完善的文档,不然客户端和服务端都容易搞晕。
以下纯属个人观点,平常心,不激进,也不极端。
说实在的,特别反感马云的一系列营销方案,什么“三天后来来往找我”,什么“XX 万淘女郎入驻来往”,什么“阿里全员工任务分配制”。
但是还是抱着好奇的心态装了下,没发现功能上有什么突出的亮点。看了一会就卸载了。
就一聊天工具罢了,何必还要走借工具的壳打算做平台的老路子呢。看到微信平台游戏火了,月入多少多少眼红了?感觉已经晚了。
什么“三天后来来往找我”,找你何用?
什么“XX 万淘女郎入驻来往”,淘女郎岂是我等码畜,或天下众屌丝所能企及的?这些噱头都会随着时间的流逝,一点一点被这个时代的过量信息所淹没。阿门!
中间还有些异常判断没做,比如 arr = [1, 2] 时就会报错,默认你的输入数组 arr 是符合你给的规范的
@mlb0903 欢迎提出更好的解决方案。
大致想了下,方法可能比较笨。需要你多测试下,看是否是你想要的结果:
module ArrayDeepRecursion
def deep_recursion
return self if size < 2
collect do |_|
prefix_arr, suffix_arr = shift(2)
result_arr = prefix_arr.zip.inject([]) { |tmp_arr, prefix|
tmp_arr << suffix_arr.zip.map { |suffix| (prefix + suffix).flatten }
}.flatten(1)
return result_arr if size == 0
unshift(result_arr)
deep_recursion
end
end unless Array.method_defined?(:deep_recursion)
end
Array.send(:include, ArrayDeepRecursion)
测试结果:
arr = [[2,3],[4,5],[8,9,10]]
arr.deep_recursion
=> [[2, 4, 8], [2, 4, 9], [2, 4, 10], [2, 5, 8], [2, 5, 9], [2, 5, 10], [3, 4, 8], [3, 4, 9], [3, 4, 10], [3, 5, 8], [3, 5, 9], [3, 5, 10]]
arr = [[1, 2], [33, 44, 55], [66, 77, 88, 99]]
arr.deep_recursion
=> [[1, 33, 66], [1, 33, 77], [1, 33, 88], [1, 33, 99], [1, 44, 66], [1, 44, 77], [1, 44, 88], [1, 44, 99], [1, 55, 66], [1, 55, 77], [1, 55, 88], [1, 55, 99], [2, 33, 66], [2, 33, 77], [2, 33, 88], [2, 33, 99], [2, 44, 66], [2, 44, 77], [2, 44, 88], [2, 44, 99], [2, 55, 66], [2, 55, 77], [2, 55, 88], [2, 55, 99]]
没测过性能,不知道性能咋样。期待其他大牛贴上更科学的方法。 PS:会清空原数组:arr
好像是做景区硬件的,上次去聊过,二次被拒。但我感觉还是比较开心。不被拒的话,就不会在现在公司了。哈哈。
顶一个!看起来挻有诚意的,可惜人不在帝都,也不打算去帝都吸那里的“高含量氧”。呵呵。只能默默帮顶了。
默默地帮顶。
好像办公环境不错,公司妹纸也多,大牛也有不少。另外有个哥们好像还是跟我是同一个小区,同一个单元呢。