【发布时间】:2019-04-11 12:21:56
【问题描述】:
所以,我正在对 HackerHank 进行初学者挑战,而 ruby 的一个奇怪行为让我大吃一惊。
挑战是:找出并计算数组中有多少对。 (袜子对)
这是我的代码。
n = 100
ar = %w(50 49 38 49 78 36 25 96 10 67 78 58 98 8 53 1 4 7 29 6 59 93 74 3 67 47 12 85 84 40 81 85 89 70 33 66 6 9 13 67 75 42 24 73 49 28 25 5 86 53 10 44 45 35 47 11 81 10 47 16 49 79 52 89 100 36 6 57 96 18 23 71 11 99 95 12 78 19 16 64 23 77 7 19 11 5 81 43 14 27 11 63 57 62 3 56 50 9 13 45)
def sockMerchant(n, ar)
counter = 0
ar.each do |item|
if ar.count(item) >= 2
counter += ar.count(item)/2
ar.delete(item)
end
end
counter
end
print sockMerchant(n, ar)
问题是,它算不上好。运行函数后,它的内部数组 ar 仍然有可数对,我通过再次运行它来证明它。
还有更多。如果对数组进行排序,它的行为会有所不同。
这对我来说没有意义。
您可以在此链接上检查行为
【问题讨论】:
-
什么是
n? (您的代码中没有使用它。)根据我的经验,ar.size/2 - ar.uniq.size应该提供一个近似值,因为匹配的袜子的数量似乎总是一个奇数。 -
Array.count是直接在Array类上调用的方法,不存在。Array#count正在讨论Array实例的实例方法。这可能看起来很学术,但这是一个巨大的差异。 -
要考虑的另一件事是,在 Ruby 中,大写字母在语法中具有含义,并且是保留的或
CaseName和CONSTANT_NAME情况。应该将此方法称为sock_merchant以符合这些期望。
标签: arrays ruby sorting counting