• 大多数不加!的函数相当于先clone一个原对象再直接对新对象调用加!的函数,但map例外。map相当于建一个新的数组,再把待map的元素push进新数组,map!相当于直接遍历并修改数组中的元素。 个人觉得应该几乎所有函数都是加!快一点吧。

  • RESTAPI 分页的疑问 at 2015年04月17日

    #1楼 @liwei78 谢谢回复,大拿两个字去掉了。。

  • Ruby 中 block 的优先级 at 2015年04月08日

    ruby程序员都被惯坏了,不爱用括号...不知道lisp程序员怎么看。

  • 菜鸟一只,想报名学习一下

  • 和为定值的随机数 at 2015年01月04日

    我也来做做玩玩,先说思路: 使用一个足够大的数字作为引子,生成一个比较大数字组成的数组big_ary; 这些数字之和不一定等于80,记为big_sum; 用big_sum/sum得到差距的比值; 如果结果可以是浮点数,用big_ary除以比值得到一个small_ary已经够了; 但楼主意思应该是要整数数组,因此多一步处理: 先将small_ary取整并求和,该和由于舍去小数部分,必然小于80, 随机挑选small_ary中(80-sum_small)个数字进行+1操作从而补全80; 这样最终得到的随机数应该是均匀分布的,而且效率在O(n)

    贴代码,主要重视可读性,未在性能上优化

    BIG_NUM=1000000
    def ran_array_with_sum count, sum
      ary_big = count.times.map{rand BIG_NUM}
      sum_big = ary_big.reduce :+
      proportion = sum_big/sum.to_f
      ary_small = ary_big.map{|i| i/proportion}
      #以下为补全小数
      ary_small_int = ary_small.map{|i| i.to_i}
      sum_small = ary_small_int.reduce :+
      sum_diff = sum - sum_small
      sum_diff.times{ary_small_int[rand count]+=1}
      ary_small_int
    end
    
    ran_array_with_sum 10,80