【发布时间】:2014-06-04 09:16:57
【问题描述】:
下面我编写了一段代码,它应该计算字符串中字符的出现次数并以哈希的形式显示结果。我的想法是在我数完之后立即删除字符串中的那个字母,这样我们就不会将它多次放入哈希中。
我原来的代码是这样的:
def letter_count_spec(str)
letter_count = Hash.new #create hash
letter = str.split('') #separate letters
letter.each{ |e|
if( /[A-Za-z0-9]/.match(e) )
occurances = letter.count{ |x| x==e}
letter_count[e] = occurances
letter.delete(e) #delete letter
end
}
return letter_count
end
letter_count_spec("cat")
结果:=> {"c"=>1, "t"=>1}
我失去了“a”!
所以我尝试了这个:
def letter_count_spec(str)
letter_count = Hash.new #create hash
letter = str.split('') #separate letters
letter.each{ |e|
if( /[A-Za-z0-9]/.match(e) )
occurances = letter.count{ |x| x==e}
letter_count[e] = occurances
end
}
letter.each{ |e|
letter.delete(e) #delete letter
}
return letter_count
end
letter_count_spec("cat")
结果 => {"a"=>1, "c"=>1, "t"=>1}
为什么我需要再次遍历数组才能删除?
【问题讨论】:
-
仅供参考,有许多更好的算法可用于此任务,不涉及修改数组。例如,您可以使用集合而不是数组来存储您打算遍历的字符,或者您可以遍历数组一次并记录您看到每个字符的次数。