哪个更好?
string.each_char do |letter|
unless letter == " "
if letters.has_key?(letter)
letters[letter] = letters[letter].next
else
letters[letter] = 1
end
end
end
或
string.each_char do |letter|
if letter == " "
elsif letters.has_key?(letter)
letters[letter] = letters[letter].next
else
letters[letter] = 1
end
end
在没有身体的情况下留下一个if语句似乎很尴尬,但除非你更深入一步,似乎也更好。
这是编写此代码的更好方法。我不知道默认的哈希值,这会清理这个代码很多,但我仍然想知道哪个更好:没有正文的if语句,或者除非,或者别的。
答案 0 :(得分:1)
这可能是最好的:
letters = Hash.new(0)
string = "aaabbc"
string.each_char do |letter|
if letter != " "
letters[letter] += 1
end
end
# => {"a"=>3, "b"=>2, "c"=>1}
为了决定你的两个例子,我会避免增加额外的深度(更多的缩进)。第二个也更容易阅读,因为遵循一串if/else
语句很简单。与花哨的代码相比,拥有更易读的代码几乎总是更可取。
答案 1 :(得分:1)
您可以在构造时设置哈希的默认值:
letters = Hash.new(0)
...
letters[letter] = letters[letter].next
使用它的一个有趣方法是使用Ruby提供的一些map / reduce方法:
letters = string.chars
.reject{ |letter| letter == " " }
.each_with_object(Hash.new(0)) { |letter, memo|
memo[letter] = memo[letter].next
}