gpt4 book ai didi

ruby - 为什么我不能从 ruby​​ 中的选定键创建新的散列?

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

这个问题困扰了我一段时间。这不是一件困难的事情,但我不知道为什么没有简单的方法来做到这一点,我敢打赌有但我没有看到。

我只想取一个散列,像这样:

cars = {:bob => 'Pontiac', :fred => 'Chrysler', 
:lisa => 'Cadillac', :mary => 'Jaguar'}

然后做类似的事情

cars[:bob, :lisa]

得到

{:bob => 'Pontiac', :lisa => 'Cadillac'}

我这样做了,效果很好:

class Hash
def pick(*keys)
Hash[select { |k, v| keys.include?(k) }]
end
end

ruby-1.8.7-p249 :008 > cars.pick(:bob, :lisa)
=> {:bob=>"Pontiac", :lisa=>"Cadillac"}

显然有无数种简单的方法可以做到这一点,但我想知道是否有我遗漏的内置内容,或者一个很好的不明显的原因,它不是标准和正常的事情?没有它,我最终会使用类似的东西:

chosen_cars = {:bob => cars[:bob], :lisa => cars[:lisa]}

这不是世界末日,但也不是很漂亮。看起来这应该是常规词汇的一部分。我在这里缺少什么?

(相关问题,包括:Ruby Hash Whitelist Filter)(这篇博文和我的结果完全一样,但是,为什么不内置呢?http://matthewbass.com/2008/06/26/picking-values-from-ruby-hashes/)

更新:

我正在使用 Rails,它有 ActiveSupport::CoreExtensions::Hash::Slice,它完全按照我想要的方式工作,所以问题解决了,但仍然......也许其他人会在这里找到他们的答案:)

最佳答案

只是为了帮助别人,几年后:

Slice 可以很好地完成我想做的事情。

> cars.slice(:bob, :lisa)
=> {:bob=>"Pontiac", :lisa=>"Cadillac"}

关于ruby - 为什么我不能从 ruby​​ 中的选定键创建新的散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9206881/

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