我正在研究http://rubyquiz.com/quiz28.html,除了一个小虫子外几乎已经完成了。
在下面:提示是一个数组,为了参数起见,["one", "two", "three", "three", "four]
def ask_reader(prompts)
@answers = {}
for p in prompts
puts "Give me a #{p}"
@answers[p] = gets.chomp
end
end
这很好用,我得到一个答案哈希与相应的答案,除了第二个答案[p]将覆盖第一个答案,因此只留下一个“三”的值。是否有良好的“红宝石”解决方法?感谢。
答案 0 :(得分:4)
提示到值列表的地图如何:
提示1 => [“一”] prompt2 => [“二”] prompt3 => [“三”,“三”] 提示4 => [ “四”]
答案 1 :(得分:2)
两个明显的选择:
通过Array#zip
:
def ask_reader(prompts)
prompts.inject([]) do |accu, p|
puts "Give me a #{p}"
accu << gets.chomp
accu
end
end
["one", "two", "two"].zip(["1", "2", "3"])
# => [["one", "1"], ["two", "2"], ["two", "3"]]
然后迭代:
[["one", "1"], ["two", "2"], ["two", "3"]].each do |(prompt, response)|
puts "#{prompt}: #{response}"
end
或者,使用Hash
Array
值。
def ask_reader(prompts)
prompts.inject({}) do |accu, p|
puts "Give me a #{p}"
(accu[p] ||= []) << gets.chomp
accu
end
end
答案 2 :(得分:0)
使用内部字段'prompt'作为键的某些包装器对象怎么样?
答案 3 :(得分:0)
更简单的方法。
a = %w[one two three four]
h = Hash.new { |hash, key| hash[key] = a.find_index(key)+1}
p h["one"]
p h["three"]