作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
在 Ruby(或 Rails)中,我们可以做到
new_params = params.merge({:order => 'asc'})
现在 new_params
是一个带有添加键 :order
的散列。
但是是否有一行可以返回带有已删除 key 的散列?线路
new_params = params.delete(:order)
不会工作,因为 delete
方法返回值,仅此而已。我们必须分 3 步完成吗?
tmp_params = params
tmp_params.delete(:order)
return tmp_params
有没有更好的方法?因为我想做一个
new_params = (params[:order].blank? || params[:order] == 'desc') ?
params.merge({:order => 'asc') :
(foo = params; foo.delete(:order); foo) # return foo
但上面的最后一行有些笨拙。有更好的方法吗?
(注意:因为默认顺序是'desc',所以当没有order
参数时,表示默认顺序是desc
,然后切换它添加order=asc
,否则,只需删除参数order
,使其恢复为默认顺序desc
)
最佳答案
ActiveSupport
添加了一个Hash#except
方法:
h1 = { a: 1, b: 2, c: 3 }
h1.except(:a) #=> {:b=>2, :c=>3}
一个更复杂的例子:
h1 = { a:1, b: 2, c: 3 }
h2 = { b: 3, d: 5 }
h1.merge(h2).except(*h1.keys-h2.keys) #=> {:b=>3, :d=>5}
这会将 h1
中的键更新为 h2
中的键,添加 h2
中的新键并删除那些在 h1
中,但不在 h2
中。
关于ruby-on-rails - 在 Ruby 或 Rails 中,hash.merge({ :order => 'asc' }) can return a new hash with a new key. 什么可以返回带有已删除键的新散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5716081/
我是一名优秀的程序员,十分优秀!