如何按条件排除未使用的案例
How to exclude an unused case by conditions
哪个更好?
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 语句没有主体似乎很尴尬,但似乎也比使用 unless 更深入一步更可取。
有更好的方法来编写这段代码。我不知道默认哈希值,这会清理这段代码很多,但我仍然想知道哪个更可取:没有正文的 if 语句,或 unless,或其他东西。
这可能是最好的:
letters = Hash.new(0)
string = "aaabbc"
string.each_char do |letter|
if letter != " "
letters[letter] += 1
end
end
# => {"a"=>3, "b"=>2, "c"=>1}
为了在您的两个示例之间做出决定,我会避免添加 extra-depth(更多缩进)。第二个也更容易阅读,因为跟随一串 if/else
语句很简单。拥有比花哨的代码更易读的代码几乎总是更可取。
构造时可以设置hash的默认值:
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
}
哪个更好?
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 语句没有主体似乎很尴尬,但似乎也比使用 unless 更深入一步更可取。
有更好的方法来编写这段代码。我不知道默认哈希值,这会清理这段代码很多,但我仍然想知道哪个更可取:没有正文的 if 语句,或 unless,或其他东西。
这可能是最好的:
letters = Hash.new(0)
string = "aaabbc"
string.each_char do |letter|
if letter != " "
letters[letter] += 1
end
end
# => {"a"=>3, "b"=>2, "c"=>1}
为了在您的两个示例之间做出决定,我会避免添加 extra-depth(更多缩进)。第二个也更容易阅读,因为跟随一串 if/else
语句很简单。拥有比花哨的代码更易读的代码几乎总是更可取。
构造时可以设置hash的默认值:
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
}