加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么我不能从ruby中的选定键创建新哈希?

发布时间:2020-12-17 03:29:56 所属栏目:百科 来源:网络整理
导读:这一直困扰着我.这不是一件困难的事情,但我不知道为什么没有简单的方法可以做到这一点,而且我打赌有,而且我没有看到它. 我只想拿一个哈希,像这样: cars = {:bob = 'Pontiac',:fred = 'Chrysler',:lisa = 'Cadillac',:mary = 'Jaguar'} 并做一些类似的事情 c
这一直困扰着我.这不是一件困难的事情,但我不知道为什么没有简单的方法可以做到这一点,而且我打赌有,而且我没有看到它.

我只想拿一个哈希,像这样:

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,它完全按照我的意愿工作,所以问题解决了,但仍然……也许别人会在这里找到答案:)

解决方法

我一直认为这也是一个奇怪的遗漏,但实际上没有简单的标准方法.

上面的示例可能会不必要地慢,因为它会遍历所有哈希条目,无论我们是否需要它们,然后重复搜索keys参数数组.这段代码应该更快一点(假设这无关紧要 – 我还没有尝试对它进行基准测试).

class Hash
  def pick(*keys)
    values = values_at(*keys)
    Hash[keys.zip(values)]
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读