【发布时间】:2015-05-23 17:51:54
【问题描述】:
如何优雅地重新排列我的代码,以便获得输出 {:monosyllabic=>3, :polysyllabic=>4} 而不是相反?
def polysyllabic(dictionary)
words = Hash.new(0)
dictionary.each do |word|
if word.scan(/[aeiou]/).size > 1
words[:polysyllabic] += 1
else
words[:monosyllabic] +=1
end
end
polysyllabic(%w(puts locker aero mass ana put pets))
编辑: 是的,我认为有 3 个单音节词:mass、put、pets。我和其他一些人发音“puts”“就像“put s”,所以我想把它归类为多音节。如果我错了,请纠正我。
【问题讨论】:
-
单音节有4个:
puts、mass、put、pets,代码正确。 (例如您缺少end并且您需要puts words才能看到结果) -
如果问题是关于订单的,你不能在哈希中强制订单
-
哈希应该被认为是无序的,尽管它们目前是按插入顺序排序的。而是按您想要的顺序检索键,并使用它们来访问它们各自的值。
-
我认为问题是为什么
:monosyllabic的值是4,而不是3。究竟是什么问题? -
@Dave,我很少对你提出异议,但我不同意“哈希应该被认为是无序的`”,因为我遇到过很多情况是维护插入顺序(v. 1.9+ ) 是以优雅的方式处理问题的关键。如果你是在散列上长大的,我希望你很难放手......