• #27 楼 @quakewang

    感谢点评,Ruby 刚起步,简洁具体指什么还在慢慢体会,现在的感觉就是如果思路是清晰的,实现的时候就可以做到很简洁,比如第一个版本的代码(基本上就是按照 C++ 的实现方式在写),很多都是自己陷入原来的思维模式,认为需要一个 Hash of String array 但是在 Ruby 中是不需要的。至于可读性,还是要对 Ruby 语言有一定程度的理解才好。

    看了 #28 @nouse 的代码,真的就是我的想法,在此一并谢过。

  • 新手上路

    学习 Ruby 大概一周左右,受这帖子的启发开始用 Ruby 重新实现 Leetcode 上面的问题,之前找工作时 Leetcode 上面的题目都做过一遍,问题的思路是有的,更多的是关注语法层面怎么实现自己的想法。

    遇到个想不明白的地方,借这个帖子请教一下: Ruby 程序如何在简洁和易读性之间取舍?

    Anagrams 这个问题举例:

    第一个版本基本上是重写了之前的 C++ 代码:

    def anagrams(strs)
      hash = Hash.new
      strs.each do |str|
        sorted_str = str.chars.sort.join # sort each string in alphabetic order
        hash[sorted_str] ||= []
        hash[sorted_str] << str
      end
      hash.values.select{ |element| element.size > 1 }.flatten
    end
    

    后来掌握了如何使用 Ruby 的 Hash 做计数器,代码缩短成了这个样子:

    def anagrams_even_shorter(strs)
      hash = Hash.new{ |h, k| h[k] = Array.new }
      strs.each { |str| hash[str.chars.sort.join] << str }
      hash.values.select{ |value| value.size > 1 }.flatten
    end
    

    我现在的水平,anagrams 这个函数比较好理解,anagrams_even_shorter 看起来会比较费劲,想问一下各位大神,第二个版本的代码是否过度追求程序简洁导致可读性的降低?

    先谢过了。