感谢点评,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
看起来会比较费劲,想问一下各位大神,第二个版本的代码是否过度追求程序简洁导致可读性的降低?
先谢过了。