• 干 。。。 打脸了,突然想起还有个多行版本

    h = Hash.new(0); arr.each{ |(k, v)| h[k] += v.to_i }; h
    

    事实证明这个更快

  • 文章在这里,还好我有 Pocket,还能找出来 😜

    http://stackoverflow.com/questions/3230863/ruby-rails-inject-on-hashes-good-style

  • 朱老师 666,居然拿出了 benchmark

    B 大说过:『成功人士才跑 benchmark』,我等屌丝写代码就是一把梭,哈哈哈~~~

    记得之前看过的文章提过:

    1. 下标操作比 merge、update 等操作快
    2. each 应该是这些个枚举方法里面最快的,毕竟被用得最多

    所以,@luikore 的应该是所有解法里面最快的(没有之一),我想不出还能怎么更快了,不服的同学可以再战!!

    PS:(这个和主题无关,只是因为我喜欢 inject)虽然下标操作更快,但是在 inject 里面最好还是使用 merge、update,因为 inject 以 block 的最后一行作为返回值,用下标操作你就需要在最后一行显示的返回修改后的 hash,会拖得更慢,当然这时还不如直接用 each_with_object 好了

  • 这个正则该怎么写? at 2018年05月22日

    朱老师 你居然来逛社区了,工作量不饱和啊

  • 这个正则该怎么写? at 2018年05月22日

    当然不对了,单引号和双引号能一样么

    建议还是花点时间熟悉一下正则吧,以后要用的地方太多了

  • 这个正则该怎么写? at 2018年05月22日

    https://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/Searchable#css-instance_method

    #css 就是一个元素选择器,class 的空格本来就是有意义的

    Nokogiri::HTML(str).css('.eee.-fff_ggg').inner_html
    

    如果是因为换行等其他原因意外引入的空格,且你确保那儿只有一个 class 的时候,可以先对 str 进行一点处理

    str.gsub(/class=\".+?\"/) { |m| m.sub(' ', '') }
    
  • class Singleton
      # 这个 count 准确的说是『类的实例变量』,因为 Singleton 这个类本身也是 Class 这个的父类的一个实例
      # 它的行为更接近类变量,用来储存类的一些状态
      # 区别是它不能在类的实例里面直接被调用(当然你可以再给它定义一个 getter/setter)
      @count = 0
    
      def initialize
        # 这才是我们通常意识里面的实例变量
        # 并不存在于类中,也不能在类里面声明或调用
        # 只在类的实例里面使用
        # 当然,你也可以在任何一个实例方法里面去声明或这修改它
        # attr_read、attr_write、attr_accessor 声明的也是这种的
        @count = 0
      end
    end
    

    这两个 count 其实不是同一个东西

  • class Singleton
      @@uniqueInstance = nil
    
      def self.instance
        unless @@uniqueInstance
          @@uniqueInstance = new
        end
        @@uniqueInstance
      end
    
      def initialize
        @count = 0
      end
    
      def plus
        @count += 1
      end
    
      private_class_method :new
    end
    
  • 并没有什么误解,只是故意抬一下杠

    如果在一个多人协作的项目中看到一段代码洋洋洒洒 7、8 行,做的事情就是拼一个 hash,而且很有可能是一些 Hash/Array 的现有方法可以很容易完成的内容,一方面还是会觉得不够简洁,另一方面也就或多或少的体现了写代码的人对这些内部 API 不够熟悉吧

    所以我才会在一开始就给了一个看似另类的解法,用了两个看上去不常用但其实很有用的方法,我是希望 LZ 能看了自己去查查 API,或许他这一查就查出新大陆呢,哈哈哈~~

    写成一个表达式还有一个好处是可以接着链式调用去做其他处理,在我的印象里好像挺多人喜欢这么干的,虽然有时候确实会牺牲一些可读性

    Anyway,开心就好

  • 思维够敏捷呀 感觉这个都可以拿去当面试题了