我有一个看起来像这样的哈希:
params = { :irrelevant => "A String",
:choice1 => "Oh look, another one",
:choice2 => "Even more strings",
:choice3 => "But wait",
:irrelevant2 => "The last string" }
Run Code Online (Sandbox Code Playgroud)
我想要一种简单的方法来拒绝所有不是选择+ int的键.它可以是choice1,或者choice1到choice10.它有所不同.
如何仅使用单词选择和后面的一个或多个数字来单独输出键?
奖金:
将哈希值转换为带有制表符(\ t)作为分隔符的字符串.我这样做了,但需要几行代码.通常,大师级的Rubician可以在一个左右的行中完成.
我有一个哈希:
h1 = {:a => :A, :b => :B, :c => :C, :d => :D}
Run Code Online (Sandbox Code Playgroud)
提取像这样的子哈希的最佳方法是什么?
h1.extract_subhash(:b, :d, :e, :f) # => {:b => :B, :d => :D}
h1 #=> {:a => :A, :c => :C}
Run Code Online (Sandbox Code Playgroud) 我确信我很想理解使用电话,但我想我可以做这样的事情.
@case_studies = CaseStudy.call("some_named_scope")
Run Code Online (Sandbox Code Playgroud)
在哪里"some_named_scope"也是一个命名的范围CaseStudy.我需要使用调用的原因是因为我已经命名了与控制器中的操作名称相同的范围,因此我正在跳这样做.
@case_studies = CaseStudy.call(params[:action])
Run Code Online (Sandbox Code Playgroud)
编辑
原谅我,我刚刚意识到我正在考虑发送方法,一些字呼叫如何卡在我脑海中.但@case_studies = CaseStudy.send(params[:action])按照我的想法行事.
这一直困扰着我.这不是一件困难的事情,但我不知道为什么没有简单的方法可以做到这一点,而且我打赌有,而且我没有看到它.
我只想拿一个哈希,像这样:
cars = {:bob => 'Pontiac', :fred => 'Chrysler',
:lisa => 'Cadillac', :mary => 'Jaguar'}
Run Code Online (Sandbox Code Playgroud)
并做一些类似的事情
cars[:bob, :lisa]
Run Code Online (Sandbox Code Playgroud)
得到
{:bob => 'Pontiac', :lisa => 'Cadillac'}
Run Code Online (Sandbox Code Playgroud)
我这样做了,效果很好:
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"}
Run Code Online (Sandbox Code Playgroud)
显然有很多简单的方法可以做到这一点,但我想知道是否有一些内置的东西我错过了,或者一个不明显的原因它不是标准和正常的东西?没有它,我最终会使用类似的东西:
chosen_cars = {:bob => cars[:bob], :lisa => cars[:lisa]}
Run Code Online (Sandbox Code Playgroud)
这不是世界末日,但它不是很漂亮.看起来这应该是常规词汇的一部分.我在这里错过了什么?
(相关问题,包括:Ruby Hash Whitelist Filter)(这篇博文与我的结果完全相同,但同样,为什么不内置这个?http://matthewbass.com/2008/06/26/picking -values-from-ruby-hashes /)
更新:
我正在使用Rails,它有ActiveSupport :: CoreExtensions :: Hash :: Slice,它完全按照我的意愿工作,所以问题解决了,但仍然......也许别人会在这里找到答案:)