gpt4 book ai didi

ruby-on-rails - 在 Ruby 或 Rails 中,hash.merge({ :order => 'asc' }) can return a new hash with a new key. 什么可以返回带有已删除键的新散列?

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:20 26 4
gpt4 key购买 nike

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com