填写Ruby哈希的更好方法是什么?

Bru*_*nes 9 ruby hash

有一个更好的方法吗?(看起来很笨重)

form_params = {}
form_params['tid'] = tid
form_params['qid'] = qid
form_params['pri'] = pri
form_params['sec'] = sec
form_params['to_u'] = to_u
form_params['to_d'] = to_d
form_params['from'] = from
form_params['wl'] = wl
Run Code Online (Sandbox Code Playgroud)

Sch*_*jer 20

form_params = { "tid" => tid, "qid" => qid }     
Run Code Online (Sandbox Code Playgroud)

或者你可以做到

form_params = Hash["tid", tid, "qid", qid]       #=> {"tid"=>tid, "qid"=>qid}
form_params = Hash["tid" => tid, "qid" => qid]   #=> {"tid"=>tid, "qid"=>qid}
form_params = Hash[tid => tid, qid => qid]       #=> {"tid"=>tid, "qid"=>qid}
Run Code Online (Sandbox Code Playgroud)

(nb.最后一个是1.9的新内容,它使你的关键符号而不是字符串)

{tid:tid,qid:qid}

键和值成对出现,因此必须有偶数个参数.

  • 从Ruby 1.9开始,如果关键是符号而不是字符串,那么你也可以说{tid:tid,qid:qid}. (2认同)

ry.*_*ry. 9

稍微修改上面的内容,因为你的例子有字符串键:

form_params = {}
%w(tid qid pri sec to_u to_d from wl).each{|v| form_params[v] = send(v)} 
Run Code Online (Sandbox Code Playgroud)


Rôm*_*con 7

如果性能不重要,这个可能看起来更好:

form_params = {}
['tid', 'qid', 'pri', 'sec', 'to_u', 'to_d', 'from', 'wl'].each do |v|
  form_params[v] = eval(v)
end
Run Code Online (Sandbox Code Playgroud)

如果这些名称实际上是方法,您可以用eval更快的方式替换send:

form_params[v] = send(v.to_sym)
Run Code Online (Sandbox Code Playgroud)

(更新)使用的另一种(更优雅)方式inject:

form_params = ['tid', 'qid', 'pri', 'sec', 'to_u', 'to_d', 'from', 'wl'].inject({}) { |h, v| h[v] = send(v); h }
Run Code Online (Sandbox Code Playgroud)