Ruby 一道 Ruby 题目

ucooling · 2014年04月23日 · 最后由 bluexuemei 回复于 2014年04月24日 · 3132 次阅读

这是在http://www.codewars.com/上看到的一个题目,想了好久,没有想到怎么解,看看大家看到这道题有什么想法。 以下是一个测试用例: solution([:draft, :completed], 0) # should return {draft: 0, completed: 0}

def solution(keys, default_value) # TODO: complete end

这 website 适合练习找 bug 和写代码的能力

我不大清楚题目要求,这样行不?

def solution(keys, default_value)
  the_hash = Hash.new
  keys.each { |key| the_hash[key] = default_value }
  the_hash
end
def solution(keys, default_value)
  keys.reduce({}) { |hash, key| hash[key] = default_value; hash }
end
匿名 #4 2014年04月23日

那里,想不到的话其实可以直接放弃然后看别人的答案的……

这题目测是 kyu 7 吧?难度不算高了

[keys, [default_value] * keys.size].transpose.to_h

#6 楼 @swordray 一开始也想用类似的方法,不过产生的临时数组太恐怖了...

Hash[keys.zip Array.new(keys.size, default_value)]

#7 楼 @saiga 直接 map 就好了吧。。。

Hash[keys.map {|k| [k, default_value]}]

#8 楼 @Kabie = = 我咋没想到。不过还是没有实用价值.... _(:з」∠)

#5 楼 @AlphaLiu 对的,刚开始做这种题目,感觉思维还跟不太上,毕竟学习 Ruby 才不长时间

#8 楼 @Kabie 恩,这样好不行,结果的格式不对

#4 楼 @dorentus 今天刚看到这个,无意中试一下,还不知道在那边去看别人的答案呢

果然都是一行流

#6 楼 @swordray 只有 ruby2.0 才支持 to_h

匿名 #15 2014年04月24日

#12 楼 @mlb0903 他们把这个功能藏得比较难找……

直接答题的时候看不到,但是中断答题,到自己的 profile 页面里面看历史答题记录,点进题目的页面(类似 http://www.codewars.com/kata/50654ddff44f800200000001 这样的 URL),然后点上面的 Solutions tab,如果没完成过的话,它就会问你要不要放弃答题得分的机会而直接看别人的答案。

#15 楼 @dorentus 谢谢分享,这个网站真是蛋疼!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号